[PATCH 5 of 5] template: add successors template

Boris Feld boris.feld at octobus.net
Wed Jul 5 16:53:58 EDT 2017


# HG changeset patch
# User Boris Feld <boris.feld at octobus.net>
# Date 1499073720 -7200
#      Mon Jul 03 11:22:00 2017 +0200
# Node ID 82e2b4eb96b573dde890d725d758dbbc49407133
# Parent  870bfaafd90e030b85b869922050be98f000a9a9
# EXP-Topic successorstemplate
template: add successors template

Add a 'successorssets' template that returns the list of all closest known
sucessorssets for a changectx. The elements of the list are changesets.

The "closest successors" are the first locally known revisions encountered
while, walking successors markers. It uses successorsets previously modified
to support the closest argument.

This logic respect repository filtering. So hidden revision will be skipped by
this logic unless --hidden is specified. Since we only display the visible
predecessors, this template will not display anything in most case. It makes a
good candidate for inclusion in the default log output.

I updated the test-obsmarker-template.t test file introduced with the
predecessors template to test successorssets template.

diff -r 870bfaafd90e -r 82e2b4eb96b5 mercurial/templatekw.py
--- a/mercurial/templatekw.py	Mon Jul 03 14:22:28 2017 +0200
+++ b/mercurial/templatekw.py	Mon Jul 03 11:22:00 2017 +0200
@@ -602,6 +602,38 @@
                    lambda x: {'ctx': repo[x], 'revcache': {}},
                    lambda d: _formatrevnode(d['ctx']))
 
+ at templatekeyword("successorssets")
+def showsuccessorssets(repo, ctx, **args):
+    """Returns a string of sets of successors for a changectx
+
+    Format used is: [ctx1, ctx2], [ctx3] if ctx has been splitted into ctx1 and
+    ctx2 while also diverged into ctx3"""
+    if not ctx.obsolete():
+        return ''
+    args = pycompat.byteskwargs(args)
+
+    ssets = obsutil.successorssets(repo, ctx.node(), closest=True)
+    ssets = [[hex(n) for n in ss] for ss in ssets]
+
+    data = []
+    for ss in ssets:
+        h = _hybrid(None, ss, lambda x: {'ctx': repo[x], 'revcache': {}},
+                    lambda d: _formatrevnode(d['ctx']))
+        data.append(h)
+
+    # Format the successorssets
+    def render(d):
+        t = []
+        for i in d.gen:
+            t.append(i)
+        return "".join(t)
+
+    def gen(data):
+        yield "; ".join(render(d) for d in data)
+
+    return _hybrid(gen(data), data, lambda x: {'successorset': x},
+                   lambda d: d["successorset"])
+
 @templatekeyword('p1rev')
 def showp1rev(repo, ctx, templ, **args):
     """Integer. The repository-local revision number of the changeset's
diff -r 870bfaafd90e -r 82e2b4eb96b5 tests/test-obsmarker-template.t
--- a/tests/test-obsmarker-template.t	Mon Jul 03 14:22:28 2017 +0200
+++ b/tests/test-obsmarker-template.t	Mon Jul 03 11:22:00 2017 +0200
@@ -16,7 +16,10 @@
   >     {if(predecessors, "\n  Predecessors: {predecessors}")}\
   >     {if(predecessors, "\n  semi-colon: {join(predecessors, "; ")}")}\
   >     {if(predecessors, "\n  json: {predecessors|json}")}\
-  >     {if(predecessors, "\n  map: {join(predecessors % "{rev}:{node}", " ")}")}\n'
+  >     {if(predecessors, "\n  map: {join(predecessors % "{rev}:{node}", " ")}")}\
+  >     {if(successorssets, "\n  Successors: {successorssets}")}\
+  >     {if(successorssets, "\n  multi-line: {join(successorssets, "\n  multi-line: ")}")}\
+  >     {if(successorssets, "\n  json: {successorssets|json}")}\n'
   > EOF
 
 Test templates on amended commit
@@ -75,7 +78,9 @@
   |    json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
   |    map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
   | @  471f378eab4c
-  |/
+  |/     Successors: 4:d004c8f274b9
+  |      multi-line: 4:d004c8f274b9
+  |      json: [["d004c8f274b9ec480a47a93c10dac5eee63adb78"]]
   o  ea207398892e
   
   $ hg up 'desc(A1)' --hidden
@@ -89,7 +94,9 @@
   |    json: ["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]
   |    map: 3:a468dc9b36338b14fdb7825f55ce3df4e71517ad
   | @  a468dc9b3633
-  |/
+  |/     Successors: 4:d004c8f274b9
+  |      multi-line: 4:d004c8f274b9
+  |      json: [["d004c8f274b9ec480a47a93c10dac5eee63adb78"]]
   o  ea207398892e
   
 Predecessors template should show all the predecessors as we force their display
@@ -105,10 +112,15 @@
   |      semi-colon: 1:471f378eab4c
   |      json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
   |      map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
+  |      Successors: 4:d004c8f274b9
+  |      multi-line: 4:d004c8f274b9
+  |      json: [["d004c8f274b9ec480a47a93c10dac5eee63adb78"]]
   | x  f137d23bb3e1
   | |
   | x  471f378eab4c
-  |/
+  |/     Successors: 3:a468dc9b3633
+  |      multi-line: 3:a468dc9b3633
+  |      json: [["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]]
   o  ea207398892e
   
 
@@ -132,10 +144,15 @@
   |      semi-colon: 1:471f378eab4c
   |      json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
   |      map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
+  |      Successors: 4:d004c8f274b9
+  |      multi-line: 4:d004c8f274b9
+  |      json: [["d004c8f274b9ec480a47a93c10dac5eee63adb78"]]
   | x  f137d23bb3e1
   | |
   | x  471f378eab4c
-  |/
+  |/     Successors: 3:a468dc9b3633
+  |      multi-line: 3:a468dc9b3633
+  |      json: [["a468dc9b36338b14fdb7825f55ce3df4e71517ad"]]
   o  ea207398892e
   
 
@@ -216,7 +233,9 @@
   |    json: ["471597cad322d1f659bb169751be9133dad92ef3"]
   |    map: 1:471597cad322d1f659bb169751be9133dad92ef3
   | @  471597cad322
-  |/
+  |/     Successors: 2:337fec4d2edc 3:f257fde29c7a
+  |      multi-line: 2:337fec4d2edc 3:f257fde29c7a
+  |      json: [["337fec4d2edcf0e7a467e35f818234bc620068b5", "f257fde29c7a847c9b607f6e958656d0df0fb15c"]]
   o  ea207398892e
   
   $ hg up f257fde29c7a
@@ -245,7 +264,9 @@
   |    json: ["471597cad322d1f659bb169751be9133dad92ef3"]
   |    map: 1:471597cad322d1f659bb169751be9133dad92ef3
   | x  471597cad322
-  |/
+  |/     Successors: 2:337fec4d2edc 3:f257fde29c7a
+  |      multi-line: 2:337fec4d2edc 3:f257fde29c7a
+  |      json: [["337fec4d2edcf0e7a467e35f818234bc620068b5", "f257fde29c7a847c9b607f6e958656d0df0fb15c"]]
   o  ea207398892e
   
 Test templates with folded commit
@@ -325,7 +346,9 @@
   |    json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
   |    map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
   | @  471f378eab4c
-  |/
+  |/     Successors: 3:eb5a0daa2192
+  |      multi-line: 3:eb5a0daa2192
+  |      json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
   o  ea207398892e
   
   $ hg up 'desc(B0)' --hidden
@@ -340,9 +363,13 @@
   |    json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", "471f378eab4c5e25f6c77f785b27c936efb22874"]
   |    map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5 1:471f378eab4c5e25f6c77f785b27c936efb22874
   | @  0dec01379d3b
-  | |
+  | |    Successors: 3:eb5a0daa2192
+  | |    multi-line: 3:eb5a0daa2192
+  | |    json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
   | x  471f378eab4c
-  |/
+  |/     Successors: 3:eb5a0daa2192
+  |      multi-line: 3:eb5a0daa2192
+  |      json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
   o  ea207398892e
   
   $ hg up 'desc(C0)'
@@ -364,9 +391,13 @@
   |    json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", "471f378eab4c5e25f6c77f785b27c936efb22874"]
   |    map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5 1:471f378eab4c5e25f6c77f785b27c936efb22874
   | x  0dec01379d3b
-  | |
+  | |    Successors: 3:eb5a0daa2192
+  | |    multi-line: 3:eb5a0daa2192
+  | |    json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
   | x  471f378eab4c
-  |/
+  |/     Successors: 3:eb5a0daa2192
+  |      multi-line: 3:eb5a0daa2192
+  |      json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
   o  ea207398892e
   
 
@@ -481,7 +512,10 @@
   |      json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
   |      map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
   | @  471f378eab4c
-  |/
+  |/     Successors: 2:fdf9bde5129a; 4:019fadeab383
+  |      multi-line: 2:fdf9bde5129a
+  |      multi-line: 4:019fadeab383
+  |      json: [["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"], ["019fadeab383f6699fa83ad7bdb4d82ed2c0e5ab"]]
   o  ea207398892e
   
   $ hg up 'desc(A1)'
@@ -509,13 +543,19 @@
   |      semi-colon: 1:471f378eab4c
   |      json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
   |      map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
+  |      Successors: 4:019fadeab383
+  |      multi-line: 4:019fadeab383
+  |      json: [["019fadeab383f6699fa83ad7bdb4d82ed2c0e5ab"]]
   | @  fdf9bde5129a
   |/     Predecessors: 1:471f378eab4c
   |      semi-colon: 1:471f378eab4c
   |      json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
   |      map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
   | x  471f378eab4c
-  |/
+  |/     Successors: 2:fdf9bde5129a; 3:65b757b745b9
+  |      multi-line: 2:fdf9bde5129a
+  |      multi-line: 3:65b757b745b9
+  |      json: [["fdf9bde5129a28d4548fadd3f62b265cdd3b7a2e"], ["65b757b745b935093c87a2bccd877521cccffcbd"]]
   o  ea207398892e
   
 
@@ -609,7 +649,9 @@
   |    json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
   |    map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
   | @  471f378eab4c
-  |/
+  |/     Successors: 4:eb5a0daa2192
+  |      multi-line: 4:eb5a0daa2192
+  |      json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
   o  ea207398892e
   
   $ hg up 'desc(B0)' --hidden
@@ -623,9 +665,13 @@
   |    json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5", "471f378eab4c5e25f6c77f785b27c936efb22874"]
   |    map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5 1:471f378eab4c5e25f6c77f785b27c936efb22874
   | @  0dec01379d3b
-  | |
+  | |    Successors: 4:eb5a0daa2192
+  | |    multi-line: 4:eb5a0daa2192
+  | |    json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
   | x  471f378eab4c
-  |/
+  |/     Successors: 4:eb5a0daa2192
+  |      multi-line: 4:eb5a0daa2192
+  |      json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
   o  ea207398892e
   
   $ hg up 'desc(B1)' --hidden
@@ -639,9 +685,13 @@
   |    json: ["471f378eab4c5e25f6c77f785b27c936efb22874", "b7ea6d14e664bdc8922221f7992631b50da3fb07"]
   |    map: 1:471f378eab4c5e25f6c77f785b27c936efb22874 3:b7ea6d14e664bdc8922221f7992631b50da3fb07
   | @  b7ea6d14e664
-  | |
+  | |    Successors: 4:eb5a0daa2192
+  | |    multi-line: 4:eb5a0daa2192
+  | |    json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
   | x  471f378eab4c
-  |/
+  |/     Successors: 4:eb5a0daa2192
+  |      multi-line: 4:eb5a0daa2192
+  |      json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
   o  ea207398892e
   
   $ hg up 'desc(C0)'
@@ -666,10 +716,17 @@
   | |    semi-colon: 2:0dec01379d3b
   | |    json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
   | |    map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
+  | |    Successors: 4:eb5a0daa2192
+  | |    multi-line: 4:eb5a0daa2192
+  | |    json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
   | | x  0dec01379d3b
-  | |/
+  | |/     Successors: 3:b7ea6d14e664
+  | |      multi-line: 3:b7ea6d14e664
+  | |      json: [["b7ea6d14e664bdc8922221f7992631b50da3fb07"]]
   | x  471f378eab4c
-  |/
+  |/     Successors: 4:eb5a0daa2192
+  |      multi-line: 4:eb5a0daa2192
+  |      json: [["eb5a0daa21923bbf8caeb2c42085b9e463861fd0"]]
   o  ea207398892e
   
 
@@ -770,7 +827,9 @@
   |    json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
   |    map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
   | @  471f378eab4c
-  |/
+  |/     Successors: 2:7a230b46bf61
+  |      multi-line: 2:7a230b46bf61
+  |      json: [["7a230b46bf61e50b30308c6cfd7bd1269ef54702"]]
   o  ea207398892e
   
   $ hg up 'desc(A2)'
@@ -791,7 +850,9 @@
   |    json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
   |    map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
   | x  471f378eab4c
-  |/
+  |/     Successors: 2:7a230b46bf61
+  |      multi-line: 2:7a230b46bf61
+  |      json: [["7a230b46bf61e50b30308c6cfd7bd1269ef54702"]]
   o  ea207398892e
   
 
@@ -839,11 +900,18 @@
   | |    semi-colon: 1:471f378eab4c
   | |    json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
   | |    map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
+  | |    Successors: 3:f897c6137566; 1:471f378eab4c
+  | |    multi-line: 3:f897c6137566
+  | |    multi-line: 1:471f378eab4c
+  | |    json: [["f897c6137566320b081514b4c7227ecc3d384b39"], ["471f378eab4c5e25f6c77f785b27c936efb22874"]]
   | x  471f378eab4c
   |/     Predecessors: 2:0dec01379d3b
   |      semi-colon: 2:0dec01379d3b
   |      json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
   |      map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
+  |      Successors: 2:0dec01379d3b
+  |      multi-line: 2:0dec01379d3b
+  |      json: [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]]
   o  ea207398892e
   
 
@@ -879,11 +947,18 @@
   | |    semi-colon: 1:471f378eab4c
   | |    json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
   | |    map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
+  | |    Successors: 3:f897c6137566; 1:471f378eab4c
+  | |    multi-line: 3:f897c6137566
+  | |    multi-line: 1:471f378eab4c
+  | |    json: [["f897c6137566320b081514b4c7227ecc3d384b39"], ["471f378eab4c5e25f6c77f785b27c936efb22874"]]
   | x  471f378eab4c
   |/     Predecessors: 2:0dec01379d3b
   |      semi-colon: 2:0dec01379d3b
   |      json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
   |      map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
+  |      Successors: 2:0dec01379d3b
+  |      multi-line: 2:0dec01379d3b
+  |      json: [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]]
   @  ea207398892e
   
 Test template with split + divergence with cycles
@@ -1059,7 +1134,10 @@
   | o  ba2ed02b0c9a
   | |
   | x  4a004186e638
-  |/
+  |/     Successors: 8:b18bc8331526; 9:0b997eb7ceee
+  |      multi-line: 8:b18bc8331526
+  |      multi-line: 9:0b997eb7ceee
+  |      json: [["b18bc8331526a22cbb1801022bd1555bf291c48b"], ["0b997eb7ceeee06200a02f8aab185979092d514e"]]
   o  dd800401bd8c
   |
   o  f897c6137566
@@ -1087,13 +1165,19 @@
   |      semi-colon: 4:9bd10a0775e4
   |      json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
   |      map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
+  |      Successors: 8:b18bc8331526; 9:0b997eb7ceee
+  |      multi-line: 8:b18bc8331526
+  |      multi-line: 9:0b997eb7ceee
+  |      json: [["b18bc8331526a22cbb1801022bd1555bf291c48b"], ["0b997eb7ceeee06200a02f8aab185979092d514e"]]
   o  dd800401bd8c
   |    Predecessors: 4:9bd10a0775e4
   |    semi-colon: 4:9bd10a0775e4
   |    json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
   |    map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
   | x  9bd10a0775e4
-  |/
+  |/     Successors: 5:dd800401bd8c 6:4a004186e638 7:ba2ed02b0c9a
+  |      multi-line: 5:dd800401bd8c 6:4a004186e638 7:ba2ed02b0c9a
+  |      json: [["dd800401bd8c79d815329277739e433e883f784e", "4a004186e63889f20cb16434fcbd72220bd1eace", "ba2ed02b0c9a56b9fdbc4e79c7e57866984d8a1f"]]
   o  f897c6137566
   |    Predecessors: 2:0dec01379d3b
   |    semi-colon: 2:0dec01379d3b
@@ -1104,11 +1188,18 @@
   | |    semi-colon: 1:471f378eab4c
   | |    json: ["471f378eab4c5e25f6c77f785b27c936efb22874"]
   | |    map: 1:471f378eab4c5e25f6c77f785b27c936efb22874
+  | |    Successors: 3:f897c6137566; 1:471f378eab4c
+  | |    multi-line: 3:f897c6137566
+  | |    multi-line: 1:471f378eab4c
+  | |    json: [["f897c6137566320b081514b4c7227ecc3d384b39"], ["471f378eab4c5e25f6c77f785b27c936efb22874"]]
   | x  471f378eab4c
   |/     Predecessors: 2:0dec01379d3b
   |      semi-colon: 2:0dec01379d3b
   |      json: ["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]
   |      map: 2:0dec01379d3be6318c470ead31b1fe7ae7cb53d5
+  |      Successors: 2:0dec01379d3b
+  |      multi-line: 2:0dec01379d3b
+  |      json: [["0dec01379d3be6318c470ead31b1fe7ae7cb53d5"]]
   o  ea207398892e
   
   $ hg up --hidden 4
@@ -1137,7 +1228,10 @@
   |    json: ["9bd10a0775e478708cada5f176ec6de654359ce7"]
   |    map: 4:9bd10a0775e478708cada5f176ec6de654359ce7
   | @  9bd10a0775e4
-  |/
+  |/     Successors: 5:dd800401bd8c 9:0b997eb7ceee 10:eceed8f98ffc; 5:dd800401bd8c 8:b18bc8331526 10:eceed8f98ffc
+  |      multi-line: 5:dd800401bd8c 9:0b997eb7ceee 10:eceed8f98ffc
+  |      multi-line: 5:dd800401bd8c 8:b18bc8331526 10:eceed8f98ffc
+  |      json: [["dd800401bd8c79d815329277739e433e883f784e", "0b997eb7ceeee06200a02f8aab185979092d514e", "eceed8f98ffc4186032e29a6542ab98888ebf68d"], ["dd800401bd8c79d815329277739e433e883f784e", "b18bc8331526a22cbb1801022bd1555bf291c48b", "eceed8f98ffc4186032e29a6542ab98888ebf68d"]]
   o  f897c6137566
   |
   o  ea207398892e


More information about the Mercurial-devel mailing list