revert: fix corner case found by faheem mitha.
authorVadim Gelfer <vadim.gelfer@gmail.com>
Thu, 11 May 2006 22:10:47 -0700
changeset 2272 e9a0ed9ed4d9
parent 2271 90b122730d32
child 2273 f116ddea537f
revert: fix corner case found by faheem mitha. if file not in dest manifest, remove only if in source manifest.
mercurial/commands.py
tests/test-revert
tests/test-revert.out
--- a/mercurial/commands.py	Thu May 11 21:55:15 2006 -0700
+++ b/mercurial/commands.py	Thu May 11 22:10:47 2006 -0700
@@ -2277,6 +2277,7 @@
                            'you must specify the revision to revert to'))
     else:
         node = parent
+    pmf = None
     mf = repo.manifest.read(repo.changelog.read(node)[0])
 
     wlock = repo.wlock()
@@ -2359,7 +2360,12 @@
                 if exact: ui.warn(_('no changes needed to %s\n' % rel))
                 continue
             if not in_mf:
-                handle(remove, False)
+                if pmf is None:
+                    # only need parent manifest in this unlikely case,
+                    # so do not read by default
+                    pmf = repo.manifest.read(repo.changelog.read(parent)[0])
+                if abs in pmf:
+                    handle(remove, False)
         update[abs] = True
 
     repo.dirstate.forget(forget[0])
--- a/tests/test-revert	Thu May 11 21:55:15 2006 -0700
+++ b/tests/test-revert	Thu May 11 22:10:47 2006 -0700
@@ -68,4 +68,16 @@
 echo %% should print executable
 test -x c && echo executable
 
+echo %% issue 241
+hg init a
+cd a
+echo a >> a
+hg commit -A -d '1 0' -m a
+echo a >> a
+hg commit -d '2 0' -m a
+hg update 0
+mkdir b
+echo b > b/b
+hg revert -rtip
+
 true
--- a/tests/test-revert.out	Thu May 11 21:55:15 2006 -0700
+++ b/tests/test-revert.out	Thu May 11 22:10:47 2006 -0700
@@ -51,3 +51,6 @@
 reverting c
 %% should print executable
 executable
+%% issue 241
+adding a
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved