# HG changeset patch # User FUJIWARA Katsunori # Date 2015-10-04 12:33:29 # Node ID b3188339a7726d10a6ee212041c14d501ff8305c # Parent 3b0ec09192ae4bf54c56d605b1395d9f7068b904 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. diff --git a/hgext/keyword.py b/hgext/keyword.py --- a/hgext/keyword.py +++ b/hgext/keyword.py @@ -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