discovery: factor out calculation of heads to not warn about
authorRyan McElroy <rmcelroy@fb.com>
Fri, 06 Nov 2015 09:48:24 -0800
changeset 26862 894f54d84d4a
parent 26860 f9984f76fd90
child 26863 0879bf38ec84
discovery: factor out calculation of heads to not warn about In addition to taking a step towards getting an unreasonably large function factored into smaller, more manageable functions, this will allow extensions such as remotenames have more control over what pushes are allowed or not.
mercurial/discovery.py
--- a/mercurial/discovery.py	Wed Nov 04 15:17:52 2015 -0600
+++ b/mercurial/discovery.py	Fri Nov 06 09:48:24 2015 -0800
@@ -238,6 +238,23 @@
         unsynced = set()
     return {None: (oldheads, newheads, unsynced)}
 
+def _nowarnheads(repo, remote, newbookmarks):
+    # Compute newly pushed bookmarks. We don't warn about bookmarked heads.
+    localbookmarks = repo._bookmarks
+    remotebookmarks = remote.listkeys('bookmarks')
+    bookmarkedheads = set()
+    for bm in localbookmarks:
+        rnode = remotebookmarks.get(bm)
+        if rnode and rnode in repo:
+            lctx, rctx = repo[bm], repo[rnode]
+            if bookmarks.validdest(repo, rctx, lctx):
+                bookmarkedheads.add(lctx.node())
+        else:
+            if bm in newbookmarks and bm not in remotebookmarks:
+                bookmarkedheads.add(repo[bm].node())
+
+    return bookmarkedheads
+
 def checkheads(repo, remote, outgoing, remoteheads, newbranch=False, inc=False,
                newbookmarks=[]):
     """Check that a push won't add any outgoing head
@@ -268,19 +285,8 @@
                          hint=_("use 'hg push --new-branch' to create"
                                 " new remote branches"))
 
-    # 2. Compute newly pushed bookmarks. We don't warn about bookmarked heads.
-    localbookmarks = repo._bookmarks
-    remotebookmarks = remote.listkeys('bookmarks')
-    bookmarkedheads = set()
-    for bm in localbookmarks:
-        rnode = remotebookmarks.get(bm)
-        if rnode and rnode in repo:
-            lctx, rctx = repo[bm], repo[rnode]
-            if bookmarks.validdest(repo, rctx, lctx):
-                bookmarkedheads.add(lctx.node())
-        else:
-            if bm in newbookmarks and bm not in remotebookmarks:
-                bookmarkedheads.add(repo[bm].node())
+    # 2. Find heads that we need not warn about
+    nowarnheads = _nowarnheads(repo, remote, newbookmarks)
 
     # 3. Check for new heads.
     # If there are more heads after the push than before, a suitable
@@ -366,7 +372,7 @@
                              " pushing new heads")
         elif len(newhs) > len(oldhs):
             # remove bookmarked or existing remote heads from the new heads list
-            dhs = sorted(newhs - bookmarkedheads - oldhs)
+            dhs = sorted(newhs - nowarnheads - oldhs)
         if dhs:
             if errormsg is None:
                 if branch not in ('default', None):