@@ -579,6 +579,14 @@
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)
+
def successorsandmarkers(repo, ctx):
"""compute the raw data needed for computing obsfate
Returns a list of dict, one dict per successors set
@@ -7,10 +7,10 @@
from __future__ import absolute_import
+import collections
import os
import re
import types
-import collections
from .i18n import _
from . import (
@@ -869,6 +869,25 @@
return obsutil._successorsetverb(successors)
+@templatefunc('obsfateusers(markers)')
+def obsfateusers(context, mapping, args):
+ """ Compute obsfate related information based on markers
+
+ (EXPERIMENTAL)
+ """
+ if not len(args) == 1:
+ # i18n: "obsfateusers" is a keyword
+ raise error.ParseError(_("obsfateusers expects two arguments"))
+
+ markers = evalfuncarg(context, mapping, args[0])
+ if not isinstance(markers, collections.Iterable):
+ # i18n: "obsfateusers" is a keyword
+ errmsg = "obsfateusers first argument should be an iterable"
+ raise error.ParseError(errmsg)
+
+ data = obsutil._markersusers(markers)
+ return templatekw._hybrid(None, data, lambda x: x, lambda d: d)
+
@templatefunc('relpath(path)')
def relpath(context, mapping, args):
"""Convert a repository-absolute path into a filesystem path relative to
@@ -14,7 +14,8 @@
> [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 @@
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 @@
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 @@
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 @@
@ 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 @@
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 @@
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 @@
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 @@
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 @@
@ 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 @@
| 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 @@
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 @@
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 @@
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 @@
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 @@
@ 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 @@
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 @@
@ 7a230b46bf61
|
| x 471f378eab4c
- |/ Obsfate: rewritten as 2:7a230b46bf61;
+ |/ Obsfate: rewritten as 2:7a230b46bf61 by test;
o ea207398892e
@@ -1194,9 +1194,9 @@
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 @@
| 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 @@
| 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 @@
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