diff --git a/mercurial/obsutil.py b/mercurial/obsutil.py --- a/mercurial/obsutil.py +++ b/mercurial/obsutil.py @@ -601,3 +601,11 @@ def successorsetverb(successorset): else: verb = 'split' return verb + +def markersusers(markers): + """ Returns a sorted list of markers users without duplicates + """ + markersmeta = [dict(m[3]) for m in markers] + users = set(meta.get('user') for meta in markersmeta if meta.get('user')) + + return sorted(users) diff --git a/mercurial/templater.py b/mercurial/templater.py --- a/mercurial/templater.py +++ b/mercurial/templater.py @@ -850,6 +850,24 @@ def mod(context, mapping, args): func = lambda a, b: a % b return runarithmetic(context, mapping, (func, args[0], args[1])) +@templatefunc('obsfateusers(markers)') +def obsfateusers(context, mapping, args): + """Compute obsfate related information based on markers (EXPERIMENTAL)""" + if len(args) != 1: + # i18n: "obsfateusers" is a keyword + raise error.ParseError(_("obsfateusers expects one arguments")) + + markers = evalfuncarg(context, mapping, args[0]) + + try: + data = obsutil.markersusers(markers) + return templatekw.hybridlist(data, name='user') + except (TypeError, KeyError, ValueError): + # i18n: "obsfateusers" is a keyword + msg = _("obsfateusers first argument should be an iterable of " + "obsmakers") + raise error.ParseError(msg) + @templatefunc('obsfateverb(successors)') def obsfateverb(context, mapping, args): """Compute obsfate related information based on successors (EXPERIMENTAL)""" diff --git a/tests/test-obsmarker-template.t b/tests/test-obsmarker-template.t --- a/tests/test-obsmarker-template.t +++ b/tests/test-obsmarker-template.t @@ -14,7 +14,8 @@ Global setup > [templates] > obsfatesuccessors = " as {join(successors, ", ")}" > obsfateverb = "{obsfateverb(successors)}" - > obsfate = "{obsfateverb}{obsfatesuccessors}; " + > obsfateusers = "{if(obsfateusers(markers), " by {join(obsfateusers(markers), ", ")}")}" + > obsfate = "{obsfateverb}{obsfatesuccessors}{obsfateusers}; " > [alias] > tlog = log -G -T '{node|short}\ > {if(predecessors, "\n Predecessors: {predecessors}")}\ @@ -93,21 +94,21 @@ Predecessors template should show curren o d004c8f274b9 | | @ 471f378eab4c - |/ Obsfate: rewritten as 4:d004c8f274b9; + |/ Obsfate: rewritten as 4:d004c8f274b9 by test1, test2; o ea207398892e $ hg fatelog o d004c8f274b9 | | @ 471f378eab4c - |/ Obsfate: rewritten as 4:d004c8f274b9; + |/ Obsfate: rewritten as 4:d004c8f274b9 by test1, test2; o ea207398892e $ hg fatelog -v o d004c8f274b9 | | @ 471f378eab4c - |/ Obsfate: rewritten as 4:d004c8f274b9; + |/ Obsfate: rewritten as 4:d004c8f274b9 by test1, test2; o ea207398892e $ hg up 'desc(A1)' --hidden @@ -130,7 +131,7 @@ Predecessors template should show curren o d004c8f274b9 | | @ a468dc9b3633 - |/ Obsfate: rewritten as 4:d004c8f274b9; + |/ Obsfate: rewritten as 4:d004c8f274b9 by test2; o ea207398892e Predecessors template should show all the predecessors as we force their display @@ -161,11 +162,11 @@ with --hidden o d004c8f274b9 | | @ a468dc9b3633 - |/ Obsfate: rewritten as 4:d004c8f274b9; + |/ Obsfate: rewritten as 4:d004c8f274b9 by test2; | x f137d23bb3e1 | | | x 471f378eab4c - |/ Obsfate: rewritten as 3:a468dc9b3633; + |/ Obsfate: rewritten as 3:a468dc9b3633 by test1; o ea207398892e @@ -210,14 +211,13 @@ visible. @ d004c8f274b9 | | x a468dc9b3633 - |/ Obsfate: rewritten as 4:d004c8f274b9; + |/ Obsfate: rewritten as 4:d004c8f274b9 by test2; | x f137d23bb3e1 | | | x 471f378eab4c - |/ Obsfate: rewritten as 3:a468dc9b3633; + |/ Obsfate: rewritten as 3:a468dc9b3633 by test1; o ea207398892e - $ hg fatelogjson --hidden @ d004c8f274b9 | @@ -319,7 +319,7 @@ Predecessors template should show curren o 337fec4d2edc | | @ 471597cad322 - |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a; + |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a by test; o ea207398892e $ hg up f257fde29c7a @@ -360,7 +360,7 @@ with --hidden o 337fec4d2edc | | x 471597cad322 - |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a; + |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a by test; o ea207398892e $ hg fatelogjson --hidden @@ -461,7 +461,7 @@ Predecessors template should show curren o eb5a0daa2192 | | @ 471f378eab4c - |/ Obsfate: rewritten as 3:eb5a0daa2192; + |/ Obsfate: rewritten as 3:eb5a0daa2192 by test; o ea207398892e $ hg up 'desc(B0)' --hidden @@ -490,9 +490,9 @@ displayed o eb5a0daa2192 | | @ 0dec01379d3b - | | Obsfate: rewritten as 3:eb5a0daa2192; + | | Obsfate: rewritten as 3:eb5a0daa2192 by test; | x 471f378eab4c - |/ Obsfate: rewritten as 3:eb5a0daa2192; + |/ Obsfate: rewritten as 3:eb5a0daa2192 by test; o ea207398892e $ hg up 'desc(C0)' @@ -528,9 +528,9 @@ with --hidden @ eb5a0daa2192 | | x 0dec01379d3b - | | Obsfate: rewritten as 3:eb5a0daa2192; + | | Obsfate: rewritten as 3:eb5a0daa2192 by test; | x 471f378eab4c - |/ Obsfate: rewritten as 3:eb5a0daa2192; + |/ Obsfate: rewritten as 3:eb5a0daa2192 by test; o ea207398892e @@ -667,7 +667,7 @@ Predecessors template should show curren | o fdf9bde5129a |/ | @ 471f378eab4c - |/ Obsfate: rewritten as 2:fdf9bde5129a; rewritten as 4:019fadeab383; + |/ Obsfate: rewritten as 2:fdf9bde5129a by test; rewritten as 4:019fadeab383 by test; o ea207398892e $ hg up 'desc(A1)' @@ -723,11 +723,11 @@ Predecessors template should the predece o 019fadeab383 | | x 65b757b745b9 - |/ Obsfate: rewritten as 4:019fadeab383; + |/ Obsfate: rewritten as 4:019fadeab383 by test; | @ fdf9bde5129a |/ | x 471f378eab4c - |/ Obsfate: rewritten as 2:fdf9bde5129a; rewritten as 3:65b757b745b9; + |/ Obsfate: rewritten as 2:fdf9bde5129a by test; rewritten as 3:65b757b745b9 by test; o ea207398892e @@ -845,7 +845,7 @@ Predecessors template should show curren o eb5a0daa2192 | | @ 471f378eab4c - |/ Obsfate: rewritten as 4:eb5a0daa2192; + |/ Obsfate: rewritten as 4:eb5a0daa2192 by test; o ea207398892e $ hg up 'desc(B0)' --hidden @@ -873,9 +873,9 @@ Predecessors template should both predec o eb5a0daa2192 | | @ 0dec01379d3b - | | Obsfate: rewritten as 4:eb5a0daa2192; + | | Obsfate: rewritten as 4:eb5a0daa2192 by test; | x 471f378eab4c - |/ Obsfate: rewritten as 4:eb5a0daa2192; + |/ Obsfate: rewritten as 4:eb5a0daa2192 by test; o ea207398892e $ hg up 'desc(B1)' --hidden @@ -903,9 +903,9 @@ Predecessors template should both predec o eb5a0daa2192 | | @ b7ea6d14e664 - | | Obsfate: rewritten as 4:eb5a0daa2192; + | | Obsfate: rewritten as 4:eb5a0daa2192 by test; | x 471f378eab4c - |/ Obsfate: rewritten as 4:eb5a0daa2192; + |/ Obsfate: rewritten as 4:eb5a0daa2192 by test; o ea207398892e $ hg up 'desc(C0)' @@ -954,11 +954,11 @@ with --hidden @ eb5a0daa2192 | | x b7ea6d14e664 - | | Obsfate: rewritten as 4:eb5a0daa2192; + | | Obsfate: rewritten as 4:eb5a0daa2192 by test; | | x 0dec01379d3b - | |/ Obsfate: rewritten as 3:b7ea6d14e664; + | |/ Obsfate: rewritten as 3:b7ea6d14e664 by test; | x 471f378eab4c - |/ Obsfate: rewritten as 4:eb5a0daa2192; + |/ Obsfate: rewritten as 4:eb5a0daa2192 by test; o ea207398892e @@ -1082,7 +1082,7 @@ Predecessors template should show curren o 7a230b46bf61 | | @ 471f378eab4c - |/ Obsfate: rewritten as 2:7a230b46bf61; + |/ Obsfate: rewritten as 2:7a230b46bf61 by test; o ea207398892e $ hg up 'desc(A2)' @@ -1119,7 +1119,7 @@ with --hidden @ 7a230b46bf61 | | x 471f378eab4c - |/ Obsfate: rewritten as 2:7a230b46bf61; + |/ Obsfate: rewritten as 2:7a230b46bf61 by test; o ea207398892e @@ -1194,9 +1194,9 @@ Check templates o f897c6137566 | | @ 0dec01379d3b - | | Obsfate: rewritten as 3:f897c6137566; rewritten as 1:471f378eab4c; + | | Obsfate: rewritten as 3:f897c6137566 by test; rewritten as 1:471f378eab4c by test; | x 471f378eab4c - |/ Obsfate: rewritten as 2:0dec01379d3b; + |/ Obsfate: rewritten as 2:0dec01379d3b by test; o ea207398892e @@ -1452,7 +1452,7 @@ Check templates | o ba2ed02b0c9a | | | x 4a004186e638 - |/ Obsfate: rewritten as 8:b18bc8331526; rewritten as 9:0b997eb7ceee; + |/ Obsfate: rewritten as 8:b18bc8331526 by test; rewritten as 9:0b997eb7ceee by test; o dd800401bd8c | o f897c6137566 @@ -1525,17 +1525,17 @@ Check templates | o ba2ed02b0c9a | | | x 4a004186e638 - |/ Obsfate: rewritten as 8:b18bc8331526; rewritten as 9:0b997eb7ceee; + |/ Obsfate: rewritten as 8:b18bc8331526 by test; rewritten as 9:0b997eb7ceee by test; o dd800401bd8c | | x 9bd10a0775e4 - |/ Obsfate: split as 5:dd800401bd8c, 6:4a004186e638, 7:ba2ed02b0c9a; + |/ Obsfate: split as 5:dd800401bd8c, 6:4a004186e638, 7:ba2ed02b0c9a by test; o f897c6137566 | | x 0dec01379d3b - | | Obsfate: rewritten as 3:f897c6137566; rewritten as 1:471f378eab4c; + | | Obsfate: rewritten as 3:f897c6137566 by test; rewritten as 1:471f378eab4c by test; | x 471f378eab4c - |/ Obsfate: rewritten as 2:0dec01379d3b; + |/ Obsfate: rewritten as 2:0dec01379d3b by test; o ea207398892e $ hg fatelogjson --hidden @@ -1604,7 +1604,7 @@ Check templates o dd800401bd8c | | @ 9bd10a0775e4 - |/ Obsfate: split as 5:dd800401bd8c, 9:0b997eb7ceee, 10:eceed8f98ffc; split as 5:dd800401bd8c, 8:b18bc8331526, 10:eceed8f98ffc; + |/ Obsfate: split as 5:dd800401bd8c, 9:0b997eb7ceee, 10:eceed8f98ffc by test; split as 5:dd800401bd8c, 8:b18bc8331526, 10:eceed8f98ffc by test; o f897c6137566 | o ea207398892e