changeset 14036:90d997a812dc

changegroup: do not count closed new heads (issue2697) If a closed head gets pulled, we currently see (example): $ hg pull pulling from $TESTTMP/repo2 searching for changes adding changesets adding manifests adding file changes added 2 changesets with 1 changes to 1 files (+1 heads) (run 'hg heads' to see heads, 'hg merge' to merge) A subsequent 'hg heads' doesn't show that head because it is closed. This patch improves the UI response texts for that same use case to: $ hg pull pulling from $TESTTMP/repo2 searching for changes adding changesets adding manifests adding file changes added 2 changesets with 1 changes to 1 files (run 'hg update' to get a working copy) That is, the part "(+1 heads)" is not shown in that case any longer.
author Adrian Buehlmann <adrian@cadifra.com>
date Sun, 24 Apr 2011 20:11:05 +0200
parents 865c30d54c30
children 4ab1e987941b
files mercurial/localrepo.py tests/test-pull-r.t
diffstat 2 files changed, 45 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/localrepo.py	Fri Apr 29 20:02:46 2011 +0200
+++ b/mercurial/localrepo.py	Sun Apr 24 20:11:05 2011 +0200
@@ -1690,7 +1690,7 @@
         # inconsistent view
         cl = self.changelog
         cl.delayupdate()
-        oldheads = len(cl.heads())
+        oldheads = cl.heads()
 
         tr = self.transaction("\n".join([srctype, urlmod.hidepassword(url)]))
         try:
@@ -1781,14 +1781,20 @@
                             _('missing file data for %s:%s - run hg verify') %
                             (f, hex(n)))
 
-            newheads = len(cl.heads())
-            heads = ""
-            if oldheads and newheads != oldheads:
-                heads = _(" (%+d heads)") % (newheads - oldheads)
+            dh = 0
+            if oldheads:
+                heads = cl.heads()
+                dh = len(heads) - len(oldheads)
+                for h in heads:
+                    if h not in oldheads and 'close' in self[h].extra():
+                        dh -= 1
+            htext = ""
+            if dh:
+                htext = _(" (%+d heads)") % dh
 
             self.ui.status(_("added %d changesets"
                              " with %d changes to %d files%s\n")
-                             % (changesets, revisions, files, heads))
+                             % (changesets, revisions, files, htext))
 
             if changesets > 0:
                 p = lambda: cl.writepending() and self.root or ""
@@ -1817,11 +1823,10 @@
                           source=srctype, url=url)
 
         # never return 0 here:
-        if newheads < oldheads:
-            return newheads - oldheads - 1
+        if dh < 0:
+            return dh - 1
         else:
-            return newheads - oldheads + 1
-
+            return dh + 1
 
     def stream_in(self, remote, requirements):
         lock = self.lock()
--- a/tests/test-pull-r.t	Fri Apr 29 20:02:46 2011 +0200
+++ b/tests/test-pull-r.t	Sun Apr 24 20:11:05 2011 +0200
@@ -27,6 +27,36 @@
   summary:     add foo
   
   $ cd ..
+
+don't show "(+1 heads)" message when pulling closed head
+
+  $ hg clone -q repo repo2
+  $ hg clone -q repo2 repo3
+  $ cd repo2
+  $ hg up -q 0
+  $ echo hello >> foo
+  $ hg ci -mx1
+  created new head
+  $ hg ci -mx2 --close-branch
+  $ cd ../repo3
+  $ hg heads -q --closed
+  2:effea6de0384
+  1:ed1b79f46b9a
+  $ hg pull
+  pulling from $TESTTMP/repo2
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 2 changesets with 1 changes to 1 files
+  (run 'hg update' to get a working copy)
+  $ hg heads -q --closed
+  4:996201fa1abf
+  2:effea6de0384
+  1:ed1b79f46b9a
+
+  $ cd ..
+
   $ hg init copy
   $ cd copy