# HG changeset patch # User Martin von Zweigbergk # Date 1451929498 28800 # Node ID 369c8f9453c27c48c772b8d991f3c997eb554bc3 # Parent 37df458d60c22524b4323de7e82e3df5b566f450 status: revert + flag-change == modified After just changing the flag on a file, plain 'hg status' will report the file as modified. However, after reverting a file to a previous revision's state and changing the flag, it will be reported as clean. Fix by comparing the flags that were previously ignored in context._buildstatus(). diff -r 37df458d60c2 -r 369c8f9453c2 mercurial/context.py --- a/mercurial/context.py Tue Jan 05 20:52:34 2016 -0800 +++ b/mercurial/context.py Mon Jan 04 09:44:58 2016 -0800 @@ -144,6 +144,8 @@ # The file was not a new file in mf2, so an entry # from diff is really a difference. modified.append(fn) + elif flag1 != flag2: + modified.append(fn) elif self[fn].cmp(other[fn]): # node2 was newnode, but the working file doesn't # match the one in mf1. diff -r 37df458d60c2 -r 369c8f9453c2 tests/test-status.t --- a/tests/test-status.t Tue Jan 05 20:52:34 2016 -0800 +++ b/tests/test-status.t Mon Jan 04 09:44:58 2016 -0800 @@ -362,6 +362,34 @@ $ cd .. +hg status with --rev and reverted changes: + + $ hg init reverted-changes-repo + $ cd reverted-changes-repo + $ echo a > file + $ hg add file + $ hg ci -m a + $ echo b > file + $ hg ci -m b + +reverted file should appear clean + + $ hg revert -r 0 . + reverting file + $ hg status -A --rev 0 + C file + +#if execbit +reverted file with changed flag should appear modified + + $ chmod +x file + $ hg status -A --rev 0 + M file + +#endif + + $ cd .. + hg status of binary file starting with '\1\n', a separator for metadata: $ hg init repo5