# HG changeset patch # User Pierre-Yves David # Date 1637634150 -3600 # Node ID f5dea753fe4e6779b8060392065393c516ddbf06 # Parent f838f5bca0384c2499648d72b2a7eea22f367c5d win32text: drop associated dirstate cache information on revert 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 previously introduced error. Differential Revision: https://phab.mercurial-scm.org/D11792 diff -r f838f5bca038 -r f5dea753fe4e hgext/narrow/narrowdirstate.py --- a/hgext/narrow/narrowdirstate.py Wed Nov 17 20:27:27 2021 +0100 +++ b/hgext/narrow/narrowdirstate.py Tue Nov 23 03:22:30 2021 +0100 @@ -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): diff -r f838f5bca038 -r f5dea753fe4e hgext/win32text.py --- a/hgext/win32text.py Wed Nov 17 20:27:27 2021 +0100 +++ b/hgext/win32text.py Tue Nov 23 03:22:30 2021 +0100 @@ -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 -r f838f5bca038 -r f5dea753fe4e tests/test-win32text.t --- a/tests/test-win32text.t Wed Nov 17 20:27:27 2021 +0100 +++ b/tests/test-win32text.t Tue Nov 23 03:22:30 2021 +0100 @@ -418,7 +418,6 @@ $ hg revert -a reverting linefeed $ hg st -q - M linefeed (known-bad-output !) $ cat linefeed % just linefeed\r (esc)