changeset 27668:369c8f9453c2

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().
author Martin von Zweigbergk <martinvonz@google.com>
date Mon, 04 Jan 2016 09:44:58 -0800
parents 37df458d60c2
children b1824a1725ed
files mercurial/context.py tests/test-status.t
diffstat 2 files changed, 30 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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.
--- 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