# HG changeset patch # User Boris Feld # Date 2017-07-03 13:34:00 # Node ID 38f08eaba6b0f7c258633dc5324677f8477963ca # Parent 3d0f8918351b3f980d6322a32c8c4f7e19a37c12 template: compute user in obsfateusers Extract, deduplicate users informations from obs markers in order to display them. Print all users for the moment, we might want to display users only in verbose mode later. 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