diff --git a/mercurial/context.py b/mercurial/context.py --- a/mercurial/context.py +++ b/mercurial/context.py @@ -140,16 +140,17 @@ class basectx(object): deletedset = set(deleted) withflags = mf1.withflags() | mf2.withflags() for fn, mf2node in mf2.iteritems(): + if fn in deletedset: + continue if fn in mf1: - if (fn not in deletedset and - ((fn in withflags and mf1.flags(fn) != mf2.flags(fn)) or + if ((fn in withflags and mf1.flags(fn) != mf2.flags(fn)) or (mf1[fn] != mf2node and - (mf2node != _newnode or self[fn].cmp(other[fn]))))): + (mf2node != _newnode or self[fn].cmp(other[fn])))): modified.append(fn) elif listclean: clean.append(fn) del mf1[fn] - elif fn not in deletedset: + else: added.append(fn) removed = mf1.keys() if removed: diff --git a/tests/test-status-rev.t b/tests/test-status-rev.t --- a/tests/test-status-rev.t +++ b/tests/test-status-rev.t @@ -153,13 +153,10 @@ BROKEN: missing_content2_content[23]-unt R content1_missing_content1-untracked R content1_missing_content3-untracked R content1_missing_missing-untracked -BROKEN: content1_content*_missing-tracked appear twice; should just be '!' $ hg status -A --rev 0 'glob:*_*_missing-tracked' ! content1_content1_missing-tracked ! content1_content2_missing-tracked ! content1_missing_missing-tracked ! missing_content2_missing-tracked ! missing_missing_missing-tracked - C content1_content1_missing-tracked - C content1_content2_missing-tracked $ hg status -A --rev 0 'glob:missing_*_missing-untracked'