From patchwork Wed Nov 24 11:15:58 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: D11792: win32text: drop associated dirstate cache information on revert From: phabricator X-Patchwork-Id: 50117 Message-Id: To: Phabricator Cc: mercurial-devel@mercurial-scm.org Date: Wed, 24 Nov 2021 11:15:58 +0000 marmoute created this revision. Herald added a reviewer: durin42. Herald added a reviewer: martinvonz. Herald added a reviewer: hg-reviewers. Herald added a subscriber: mercurial-patches. REVISION SUMMARY Otherwise the could get size from one version of the file while the on-disk version is still clean but with another size. This fix the previous introduced error. REPOSITORY rHG Mercurial BRANCH default REVISION DETAIL https://phab.mercurial-scm.org/D11792 AFFECTED FILES hgext/narrow/narrowdirstate.py hgext/win32text.py tests/test-win32text.t CHANGE DETAILS To: marmoute, durin42, martinvonz, #hg-reviewers Cc: mercurial-patches, mercurial-devel diff --git a/tests/test-win32text.t b/tests/test-win32text.t --- a/tests/test-win32text.t +++ b/tests/test-win32text.t @@ -418,7 +418,6 @@ $ hg revert -a reverting linefeed $ hg st -q - M linefeed (known-bad-output !) $ cat linefeed % just linefeed\r (esc) diff --git a/hgext/win32text.py b/hgext/win32text.py --- a/hgext/win32text.py +++ b/hgext/win32text.py @@ -47,6 +47,8 @@ from mercurial.i18n import _ from mercurial.node import short from mercurial import ( + cmdutil, + extensions, pycompat, registrar, ) @@ -215,6 +217,23 @@ repo.adddatafilter(name, fn) +def wrap_revert(orig, repo, ctx, names, uipathfn, actions, *args, **kwargs): + # reset dirstate cache for file we touch + ds = repo.dirstate + with ds.parentchange(): + for filename in actions[b'revert'][0]: + entry = ds.get_entry(filename) + if entry is not None: + if entry.p1_tracked: + ds.update_file( + filename, + entry.tracked, + p1_tracked=True, + p2_info=entry.p2_info, + ) + return orig(repo, ctx, names, uipathfn, actions, *args, **kwargs) + + def extsetup(ui): # deprecated config: win32text.warn if ui.configbool(b'win32text', b'warn'): @@ -224,3 +243,4 @@ b"https://mercurial-scm.org/wiki/Win32TextExtension\n" ) ) + extensions.wrapfunction(cmdutil, '_performrevert', wrap_revert) diff --git a/hgext/narrow/narrowdirstate.py b/hgext/narrow/narrowdirstate.py --- a/hgext/narrow/narrowdirstate.py +++ b/hgext/narrow/narrowdirstate.py @@ -38,8 +38,8 @@ return super(narrowdirstate, self).normal(*args, **kwargs) @_editfunc - def set_tracked(self, *args): - return super(narrowdirstate, self).set_tracked(*args) + def set_tracked(self, *args, **kwargs): + return super(narrowdirstate, self).set_tracked(*args, **kwargs) @_editfunc def set_untracked(self, *args):