Mercurial > hg
changeset 33276:89796a25d4bb
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.
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Mon, 03 Jul 2017 11:22:00 +0200 |
parents | 4cf60d5894b5 |
children | 4470508eb6f2 |
files | mercurial/templatekw.py tests/test-obsmarker-template.t |
diffstat | 2 files changed, 152 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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