# HG changeset patch # User Boris Feld # Date 1499073720 -7200 # Node ID 89796a25d4bb91fb418ad3e70faad2c586902ffb # Parent 4cf60d5894b5fe26c17f2eaec2a6f8a1d3283c97 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 4cf60d5894b5 -r 89796a25d4bb 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'])) +@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 4cf60d5894b5 -r 89796a25d4bb 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 @@ -771,7 +828,9 @@ | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"] | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874 | @ 471f378eab4c - |/ + |/ Successors: 2:7a230b46bf61 + | multi-line: 2:7a230b46bf61 + | json: [["7a230b46bf61e50b30308c6cfd7bd1269ef54702"]] o ea207398892e $ hg up 'desc(A2)' @@ -792,7 +851,9 @@ | json: ["471f378eab4c5e25f6c77f785b27c936efb22874"] | map: 1:471f378eab4c5e25f6c77f785b27c936efb22874 | x 471f378eab4c - |/ + |/ Successors: 2:7a230b46bf61 + | multi-line: 2:7a230b46bf61 + | json: [["7a230b46bf61e50b30308c6cfd7bd1269ef54702"]] o ea207398892e @@ -840,11 +901,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 @@ -880,11 +948,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 @@ -1060,7 +1135,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 @@ -1088,13 +1166,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 @@ -1105,11 +1189,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 @@ -1138,7 +1229,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