[PATCH STABLE] bundlerepo: handle empty repos to avoid requesting invalid bundles (issue2907)

Andrew Pritchard andrewp at fogcreek.com
Wed Jul 27 14:44:17 CDT 2011


# HG changeset patch
# User Andrew Pritchard <andrewp at fogcreek.com>
# Date 1311795774 14400
# Branch stable
# Node ID 33a3f1698e9d173dea47ff305eb6383a13c50d4e
# Parent  56848e2bb0c5a43b580dd2ca7ce1e781d4e75b2b
bundlerepo: handle empty repos to avoid requesting invalid bundles (issue2907)

The server cannot sanely return a bundle with common=[] and heads=[nullid], so
when findcommonincoming reports that the remote repo has only the null id as
its heads, act as if all remote heads were known locally (because the null id
is not a real head).

This fixes a crash when using hg incoming --bundle with an empty remote repo
and a non-empty local repo.
* * *
tests: add test case for issue2907

Test that 'hg incoming' does not crash when the local repository has changesets
and the remote repository is empty

diff -r 56848e2bb0c5 -r 33a3f1698e9d mercurial/bundlerepo.py
--- a/mercurial/bundlerepo.py	Fri Jul 22 20:31:15 2011 -0300
+++ b/mercurial/bundlerepo.py	Wed Jul 27 15:42:54 2011 -0400
@@ -313,7 +313,7 @@
     '''
     tmp = discovery.findcommonincoming(repo, other, heads=onlyheads, force=force)
     common, incoming, rheads = tmp
-    if not incoming:
+    if not incoming or rheads == [nullid]:
         try:
             os.unlink(bundlename)
         except OSError:
diff -r 56848e2bb0c5 -r 33a3f1698e9d tests/test-incoming-outgoing.t
--- a/tests/test-incoming-outgoing.t	Fri Jul 22 20:31:15 2011 -0300
+++ b/tests/test-incoming-outgoing.t	Wed Jul 27 15:42:54 2011 -0400
@@ -465,3 +465,16 @@
   date:        Thu Jan 01 00:00:00 1970 +0000
   summary:     11
   
+
+incoming from empty remote repository
+
+  $ hg init r1
+  $ hg init r2
+  $ echo a > r1/foo
+  $ hg -R r1 ci -Ama
+  adding foo
+  $ hg -R r1 incoming r2 --bundle x.hg
+  comparing with r2
+  searching for changes
+  no changes found
+  [1]


More information about the Mercurial-devel mailing list