[PATCH 5 of 9 V4] template: compute verb in obsfateverb
Boris Feld
boris.feld at octobus.net
Wed Aug 23 11:18:39 EDT 2017
# HG changeset patch
# User Boris Feld <boris.feld at octobus.net>
# Date 1499088807 -7200
# Mon Jul 03 15:33:27 2017 +0200
# Node ID 8c1da4748240142e1ee62521279cf8556192c79e
# Parent c2702967b47010d10ee0b8cf9ee633928d4b6214
# EXP-Topic obsfatetemplate
template: compute verb in obsfateverb
Add a template function obsfateverb which use the markers information to
compute a better obsfate verb.
The current logic behind the obsfate verb is simple for the moment:
- If the successorsets is empty, the changeset has been pruned, for example:
Obsfate: pruned
- If the successorsets length is 1, the changeset has been rewritten without
divergence, for example:
Obsfate: rewritten as 2:337fec4d2edc, 3:f257fde29c7a
- If the successorsets length is more than 1, the changeset has diverged, for
example:
Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a
As the divergence might occurs on a subset of successors, we might see some
successors twice:
Obsfate: split as 9:0b997eb7ceee, 5:dd800401bd8c, 10:eceed8f98ffc; split
as 8:b18bc8331526, 5:dd800401bd8c, 10:eceed8f98ffc
diff -r c2702967b470 -r 8c1da4748240 mercurial/obsutil.py
--- a/mercurial/obsutil.py Thu Aug 17 18:26:11 2017 +0200
+++ b/mercurial/obsutil.py Mon Jul 03 15:33:27 2017 +0200
@@ -568,6 +568,17 @@
cache[current] = final
return cache[initialnode]
+def _successorsetverb(successorset):
+ """ Return the verb summarizing the successorset
+ """
+ if not successorset:
+ verb = 'pruned'
+ elif len(successorset) == 1:
+ verb = 'rewritten'
+ else:
+ verb = 'split'
+ return verb
+
def successorsandmarkers(repo, ctx):
"""compute the raw data needed for computing obsfate
Returns a list of dict, one dict per successors set
diff -r c2702967b470 -r 8c1da4748240 mercurial/templater.py
--- a/mercurial/templater.py Thu Aug 17 18:26:11 2017 +0200
+++ b/mercurial/templater.py Mon Jul 03 15:33:27 2017 +0200
@@ -10,6 +10,7 @@
import os
import re
import types
+import collections
from .i18n import _
from . import (
@@ -18,6 +19,7 @@
encoding,
error,
minirst,
+ obsutil,
parser,
pycompat,
registrar,
@@ -849,6 +851,24 @@
func = lambda a, b: a % b
return runarithmetic(context, mapping, (func, args[0], args[1]))
+ at templatefunc('obsfateverb(successors)')
+def obsfateverb(context, mapping, args):
+ """ Compute obsfate related information based on successors
+
+ (EXPERIMENTAL)
+ """
+ if not len(args) == 1:
+ # i18n: "obsfateverb" is a keyword
+ raise error.ParseError(_("obsfateverb expects one arguments"))
+
+ successors = evalfuncarg(context, mapping, args[0])
+ if not isinstance(successors, collections.Iterable):
+ # i18n: "obsfateverb" is a keyword
+ errmsg = _("obsfateverb first argument should be an iterable")
+ raise error.ParseError(errmsg)
+
+ return obsutil._successorsetverb(successors)
+
@templatefunc('relpath(path)')
def relpath(context, mapping, args):
"""Convert a repository-absolute path into a filesystem path relative to
diff -r c2702967b470 -r 8c1da4748240 tests/test-obsmarker-template.t
--- a/tests/test-obsmarker-template.t Thu Aug 17 18:26:11 2017 +0200
+++ b/tests/test-obsmarker-template.t Mon Jul 03 15:33:27 2017 +0200
@@ -13,7 +13,8 @@
> stabilization=all
> [templates]
> obsfatesuccessors = " as {join(successors, ", ")}"
- > obsfate = "rewritten{obsfatesuccessors}; "
+ > obsfateverb = "{obsfateverb(successors)}"
+ > obsfate = "{obsfateverb}{obsfatesuccessors}; "
> [alias]
> tlog = log -G -T '{node|short}\
> {if(predecessors, "\n Predecessors: {predecessors}")}\
@@ -318,7 +319,7 @@
o 337fec4d2edc
|
| @ 471597cad322
- |/ Obsfate: rewritten as 2:337fec4d2edc, 3:f257fde29c7a;
+ |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a;
o ea207398892e
$ hg up f257fde29c7a
@@ -359,7 +360,7 @@
o 337fec4d2edc
|
| x 471597cad322
- |/ Obsfate: rewritten as 2:337fec4d2edc, 3:f257fde29c7a;
+ |/ Obsfate: split as 2:337fec4d2edc, 3:f257fde29c7a;
o ea207398892e
$ hg fatelogjson --hidden
@@ -1528,7 +1529,7 @@
o dd800401bd8c
|
| x 9bd10a0775e4
- |/ Obsfate: rewritten as 5:dd800401bd8c, 6:4a004186e638, 7:ba2ed02b0c9a;
+ |/ Obsfate: split as 5:dd800401bd8c, 6:4a004186e638, 7:ba2ed02b0c9a;
o f897c6137566
|
| x 0dec01379d3b
@@ -1603,7 +1604,7 @@
o dd800401bd8c
|
| @ 9bd10a0775e4
- |/ Obsfate: rewritten as 5:dd800401bd8c, 9:0b997eb7ceee, 10:eceed8f98ffc; rewritten as 5:dd800401bd8c, 8:b18bc8331526, 10:eceed8f98ffc;
+ |/ Obsfate: split as 5:dd800401bd8c, 9:0b997eb7ceee, 10:eceed8f98ffc; split as 5:dd800401bd8c, 8:b18bc8331526, 10:eceed8f98ffc;
o f897c6137566
|
o ea207398892e
More information about the Mercurial-devel
mailing list