The combination of git-read-tree and git-checkout-index used in the
git.checkout() function doesn't remove the files added to the index. This
patch adds the file removal support to the git.reset() function. It also
changes the git.apply_diff() call in stack.Series.merged_patches() so that
the the index is always updated (otherwise the reset wouldn't know which
files to remove).
Signed-off-by: Catalin Marinas <catalin.marinas@gmail.com>
- if tree_id and __run('git-read-tree', [tree_id]) != 0:
- raise GitException, 'Failed git-read-tree -m %s' % tree_id
+ if tree_id and __run('git-read-tree --reset', [tree_id]) != 0:
+ raise GitException, 'Failed git-read-tree --reset %s' % tree_id
checkout_cmd = 'git-checkout-index -q -u'
if force:
checkout_cmd = 'git-checkout-index -q -u'
if force:
tree_id = get_head()
if check_out:
tree_id = get_head()
if check_out:
+ cache_files = __tree_status(files, tree_id)
+ # files which were added but need to be removed
+ rm_files = [x[1] for x in cache_files if x[0] in ['A']]
+
checkout(files, tree_id, True)
checkout(files, tree_id, True)
+ # checkout doesn't remove files
+ map(os.remove, rm_files)
# if the reset refers to the whole tree, switch the HEAD as well
if not files:
# if the reset refers to the whole tree, switch the HEAD as well
if not files:
merged = []
for p in patches:
merged = []
for p in patches:
- if git.apply_diff(p.get_top(), p.get_bottom(), False):
+ if git.apply_diff(p.get_top(), p.get_bottom()):
merged.append(p.get_name())
merged.reverse()
merged.append(p.get_name())
merged.reverse()