bundle --base: use the right set for the base
authorBenoit Boissinot <benoit.boissinot@ens-lyon.org>
Mon, 09 Oct 2006 15:44:20 +0200
changeset 3318 a225055b3b59
parent 3291 0b5d626b354e
child 3319 80654c248793
bundle --base: use the right set for the base
mercurial/commands.py
tests/test-bundle-r
tests/test-bundle-r.out
--- a/mercurial/commands.py	Sat Oct 07 15:16:47 2006 -0400
+++ b/mercurial/commands.py	Mon Oct 09 15:44:20 2006 +0200
@@ -789,16 +789,25 @@
         if dest:
             raise util.Abort(_("--base is incompatible with specifiying "
                                "a destination"))
+        base = [repo.lookup(rev) for rev in base]
+        # create the right base
+        # XXX: nodesbetween / changegroup* should be "fixed" instead
         o = []
+        has_set = sets.Set(base)
         for n in base:
-            o.extend(repo.changelog.children(repo.lookup(n)))
-        # add common ancestor
+            has_set.update(repo.changelog.reachable(n))
         if revs:
-            all = o + revs
+            visit = list(revs)
         else:
-            all = o + repo.changelog.heads()
-        ancestor = reduce(lambda a, b: repo.changelog.ancestor(a, b), all)
-        o.append(ancestor)
+            visit = repo.changelog.heads()
+        while visit:
+            n = visit.pop(0)
+            parents = [p for p in repo.changelog.parents(n)
+                       if p != nullid and p not in has_set]
+            if len(parents) == 0:
+                o.insert(0, n)
+            else:
+                visit.extend(parents)
     else:
         setremoteconfig(ui, opts)
         dest = ui.expandpath(dest or 'default-push', dest or 'default')
--- a/tests/test-bundle-r	Sat Oct 07 15:16:47 2006 -0400
+++ b/tests/test-bundle-r	Mon Oct 09 15:44:20 2006 +0200
@@ -72,7 +72,8 @@
 hg -R test bundle --base 2 -r 7 test-bundle-branch2.hg
 hg -R test bundle --base 2 test-bundle-all.hg
 hg -R test bundle --base 3 -r tip test-bundle-should-fail.hg
-cd test-2
+hg clone test-2 test-9
+cd test-9
 echo % 2
 hg tip -q
 hg unbundle ../test-bundle-should-fail.hg
@@ -81,13 +82,28 @@
 hg unbundle ../test-bundle-all.hg
 echo % 8
 hg tip -q
+hg verify
 hg rollback
 echo % 2
 hg tip -q
 hg unbundle ../test-bundle-branch1.hg
 echo % 4
 hg tip -q
+hg verify
+hg rollback
 hg unbundle ../test-bundle-branch2.hg
-echo % 8
+echo % 6
 hg tip -q
 hg verify
+
+cd ../test
+hg merge 7
+hg ci -m merge -d "1000000 0"
+cd ..
+hg -R test bundle --base 2 test-bundle-head.hg
+hg clone test-2 test-10
+cd test-10
+hg unbundle ../test-bundle-head.hg
+echo % 9
+hg tip -q
+hg verify
--- a/tests/test-bundle-r.out	Sat Oct 07 15:16:47 2006 -0400
+++ b/tests/test-bundle-r.out	Mon Oct 09 15:44:20 2006 +0200
@@ -148,6 +148,7 @@
 % should fail
 abort: --base is incompatible with specifiying a destination
 abort: repository default-push not found!
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 % 2
 2:d62976ca1e50
 adding changesets
@@ -163,6 +164,11 @@
 (run 'hg heads' to see heads, 'hg merge' to merge)
 % 8
 8:836ac62537ab
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+4 files, 9 changesets, 7 total revisions
 rolling back last transaction
 % 2
 2:d62976ca1e50
@@ -173,15 +179,36 @@
 (run 'hg update' to get a working copy)
 % 4
 4:836ac62537ab
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+2 files, 5 changesets, 5 total revisions
+rolling back last transaction
 adding changesets
 adding manifests
 adding file changes
-added 4 changesets with 2 changes to 3 files (+1 heads)
+added 4 changesets with 3 changes to 3 files (+1 heads)
 (run 'hg heads' to see heads, 'hg merge' to merge)
-% 8
-8:80fe151401c2
+% 6
+6:80fe151401c2
 checking changesets
 checking manifests
 crosschecking files in changesets and manifests
 checking files
-4 files, 9 changesets, 7 total revisions
+3 files, 7 changesets, 6 total revisions
+2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+adding changesets
+adding manifests
+adding file changes
+added 7 changesets with 4 changes to 4 files
+(run 'hg update' to get a working copy)
+% 9
+9:607fe5912aad
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+4 files, 10 changesets, 7 total revisions