diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -2429,7 +2429,8 @@ def revert(ui, repo, *pats, **opts): if mfentry: # if version of file is same in parent and target # manifests, do nothing - if pmf[abs] != mfentry: + if (pmf[abs] != mfentry or + pmf.flags(abs) != mf.flags(abs)): handle(revert, False) else: handle(remove, False) diff --git a/tests/test-revert-flags b/tests/test-revert-flags new file mode 100755 --- /dev/null +++ b/tests/test-revert-flags @@ -0,0 +1,17 @@ +#!/bin/sh + +"$TESTDIR/hghave" execbit || exit 80 + +hg init repo +cd repo +echo foo > foo +chmod 644 foo +hg ci -qAm '644' + +chmod 755 foo +hg ci -qAm '755' + +echo '% reverting to rev 0' +hg revert -a -r 0 +hg st +hg diff --git diff --git a/tests/test-revert-flags.out b/tests/test-revert-flags.out new file mode 100644 --- /dev/null +++ b/tests/test-revert-flags.out @@ -0,0 +1,6 @@ +% reverting to rev 0 +reverting foo +M foo +diff --git a/foo b/foo +old mode 100755 +new mode 100644