[PATCH 3 of 4 accept-scripts] land: extract a function to determine accepted ranges

Kevin Bullock kbullock+mercurial at ringworld.org
Wed May 2 16:31:51 EDT 2018


# HG changeset patch
# User Kevin Bullock <kbullock at ringworld.org>
# Date 1525292536 18000
#      Wed May 02 15:22:16 2018 -0500
# Node ID 335d45810dd93321242e7c329cf6d603a3aa7516
# Parent  1e166e3e0bd6bd0fed28a8e8b9961ff3e517bef7
land: extract a function to determine accepted ranges

Mostly indentation, diff best viewed with -w.

diff --git a/land b/land
--- a/land
+++ b/land
@@ -46,40 +46,46 @@ def _destcontains(node):
 
 # Find all accepted revisions
 all_accepted = [n for n in cq.draft() if cq.accepted(n)]
-accepted_revset = ' + '.join(all_accepted)
-info = json.load(os.popen("hg log -R %s -r '%s' -Tjson" % (
-    conf.source, accepted_revset)))
-# dict of node: its parents.
-parents = {i['node']: i['parents'] for i in info}
 
-# Identify heads and roots of accepted revision ranges
-accepted_roots = {r.strip() for r in os.popen(
-    "hg log -R %s -r 'roots(%s)' -T'{node}\\n'" % (
-        conf.source, accepted_revset))}
-accepted_heads = [h.strip() for h in os.popen(
-    "hg log -R %s -r 'heads(%s)' -T'{node}\\n'" % (
-        conf.source, accepted_revset))]
-# Condense accepted revisions down into accepted ranges
 acceptrange = collections.namedtuple('acceptrange', 'roots head')
-ranges = []
-for head in accepted_heads:
-    roots = []
-    visit = [head]
-    while visit:
-        current = visit.pop(-1)
-        if _destcontains(current):
-            roots.append(current)
-        elif current not in accepted_roots:
-            visit.extend(parents[current])
-        else:
-            roots.extend(parents[current])
-    ranges.append(acceptrange(roots, head))
+
+def accepted_ranges(all_accepted):
+    accepted_revset = ' + '.join(all_accepted)
+    info = json.load(os.popen("hg log -R %s -r '%s' -Tjson" % (
+        conf.source, accepted_revset)))
+    # dict of node: its parents.
+    parents = {i['node']: i['parents'] for i in info}
 
-logging.debug('accepted roots: %s', ' '.join(accepted_roots))
-logging.debug('accepted heads: %s', ' '.join(accepted_heads))
+    # Identify heads and roots of accepted revision ranges
+    accepted_roots = {r.strip() for r in os.popen(
+        "hg log -R %s -r 'roots(%s)' -T'{node}\\n'" % (
+            conf.source, accepted_revset))}
+    accepted_heads = [h.strip() for h in os.popen(
+        "hg log -R %s -r 'heads(%s)' -T'{node}\\n'" % (
+            conf.source, accepted_revset))]
+    # Condense accepted revisions down into accepted ranges
+    ranges = []
+    for head in accepted_heads:
+        roots = []
+        visit = [head]
+        while visit:
+            current = visit.pop(-1)
+            if _destcontains(current):
+                roots.append(current)
+            elif current not in accepted_roots:
+                visit.extend(parents[current])
+            else:
+                roots.extend(parents[current])
+        ranges.append(acceptrange(roots, head))
+
+    logging.debug('accepted roots: %s', ' '.join(accepted_roots))
+    logging.debug('accepted heads: %s', ' '.join(accepted_heads))
+
+    return ranges
+
 # Figure out what range(s) are descended from the repo
 take = []
-for r in ranges:
+for r in accepted_ranges(all_accepted):
     if not all(_destcontains(root) for root in r.roots):
         logging.debug('not all roots of range %r in dest', r)
         continue
diff --git a/tests/test-land.t b/tests/test-land.t
--- a/tests/test-land.t
+++ b/tests/test-land.t
@@ -3,7 +3,9 @@ BUG: Fails with no accepted nodes to lan
   $ land
   hg: parse error: empty query
   Traceback (most recent call last):
-    File "/Users/kbullock/Source/Projects/hg/accept/tests/../land", line 51, in <module>
+    File "/Users/kbullock/Source/Projects/hg/accept/tests/../land", line 87, in <module>
+      for r in accepted_ranges(all_accepted):
+    File "/Users/kbullock/Source/Projects/hg/accept/tests/../land", line 53, in accepted_ranges
       conf.source, accepted_revset)))
     File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 290, in load
       **kw)


More information about the Mercurial-devel mailing list