revert: fix missing removes when parent was changed in dirstate
When dirstate parent is changed with dirstate.setparent before a
revert so it no longer points to where the dirstate refered to, revert
does not remove all files it should:
Revert to a different revision needs also to remove files that are not
found through disptables and not in the context or parent manifest.
--- a/mercurial/commands.py Thu Oct 27 17:22:04 2011 -0500
+++ b/mercurial/commands.py Wed Oct 26 18:47:12 2011 +0200
@@ -4756,15 +4756,14 @@
# only need parent manifest in this unlikely case,
# so do not read by default
pmf = repo[parent].manifest()
- if abs in pmf:
- if mfentry:
- # if version of file is same in parent and target
- # manifests, do nothing
- if (pmf[abs] != mfentry or
- pmf.flags(abs) != mf.flags(abs)):
- handle(revert, False)
- else:
- handle(remove, False)
+ if abs in pmf and mfentry:
+ # if version of file is same in parent and target
+ # manifests, do nothing
+ if (pmf[abs] != mfentry or
+ pmf.flags(abs) != mf.flags(abs)):
+ handle(revert, False)
+ else:
+ handle(remove, False)
if not opts.get('dry_run'):
def checkout(f):