keyword: make restrict mode False while updating files for rollback

This is a preparation for using 'repo.rollback()' instead of aborting
a current running transaction for "shelve" and "unshelve".

Before this patch, updating files as a part of 'repo.rollback()'
overridden by keyword extension always follows 'restrict' mode of the
command currently executed.

"merge", "unshelve" and so on should be 'restrict'-ed, because keyword
expansion may cause unexpected conflicts at merging while these
commands.

But, if 'repo.rollback()' is invoked while executing 'restrict'-ed
commands, modified files in the working directory are marked as
"CLEAN" unexpectedly by code path below:

        # 'lookup' below is True at updating modified files for rollback
        kwcmd = self.restrict and lookup # kwexpand/kwshrink
            :
                if kwcmd:
                    self.repo.dirstate.normal(f)

On the other hand, "rollback" command isn't 'restrict'-ed, because
rollbacking itself doesn't imply merging.

Therefore, disabling 'restrict' mode while updating files as a part of
'repo.rollback()' regardless of current 'restrict' mode should be
reasonable.
This commit is contained in:
FUJIWARA Katsunori 2015-10-04 21:33:29 +09:00
parent f283944ccb
commit 419251cb13

View File

@ -623,6 +623,7 @@ def reposetup(ui, repo):
def rollback(self, dryrun=False, force=False):
wlock = self.wlock()
origrestrict = kwt.restrict
try:
if not dryrun:
changed = self['.'].files()
@ -630,10 +631,12 @@ def reposetup(ui, repo):
if not dryrun:
ctx = self['.']
modified, added = _preselect(ctx.status(), changed)
kwt.restrict = False
kwt.overwrite(ctx, modified, True, True)
kwt.overwrite(ctx, added, True, False)
return ret
finally:
kwt.restrict = origrestrict
wlock.release()
# monkeypatches