Mercurial > evolve
annotate hgext3rd/evolve/templatekw.py @ 2926:1abafae41fe2
evolve: use registrar.templatekeyword to register template keyword functions
Now, using registrar.templatekeyword of Mercurial directly in evolve
extension should be safe enough. because it has been available since
Mercurial 3.8, and minimum Mercurial version for evolve extension is
3.8, too.
BTW, this also fixes an issue of "hg help templates" output that
template keywords "precursors" and "successors" are not displayed as
same as others, because they do not have ":KEYWORD:" prefix in their
docstring.
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Mon, 07 Aug 2017 23:22:41 +0900 |
parents | dfad30be866c |
children |
rev | line source |
---|---|
81
5cec25ce019c
Basic kill command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
1 # Copyright 2011 Peter Arrenbrecht <peter.arrenbrecht@gmail.com> |
5cec25ce019c
Basic kill command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
2 # Logilab SA <contact@logilab.fr> |
5cec25ce019c
Basic kill command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
3 # Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
519
9825c7da5b54
ensure all file have a copyright notice
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
517
diff
changeset
|
4 # Patrick Mezard <patrick@mezard.eu> |
81
5cec25ce019c
Basic kill command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
5 # |
5cec25ce019c
Basic kill command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
6 # This software may be used and distributed according to the terms of the |
5cec25ce019c
Basic kill command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
7 # GNU General Public License version 2 or any later version. |
2485
e6ecd35e99ec
refactor: extract templates into a new file
Boris Feld <boris.feld@octobus.net>
parents:
2481
diff
changeset
|
8 """evolve templates |
2032
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2024
diff
changeset
|
9 """ |
2049
b81d3775006b
evolve: move extension metadata in their own module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2048
diff
changeset
|
10 |
2485
e6ecd35e99ec
refactor: extract templates into a new file
Boris Feld <boris.feld@octobus.net>
parents:
2481
diff
changeset
|
11 from . import ( |
2612
fd35b428edfc
obsfate: by default only display the username if differ from the current one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2611
diff
changeset
|
12 error, |
2485
e6ecd35e99ec
refactor: extract templates into a new file
Boris Feld <boris.feld@octobus.net>
parents:
2481
diff
changeset
|
13 exthelper, |
2489
84a8219a2f9a
template: add the obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2487
diff
changeset
|
14 obshistory |
2485
e6ecd35e99ec
refactor: extract templates into a new file
Boris Feld <boris.feld@octobus.net>
parents:
2481
diff
changeset
|
15 ) |
617
469befc27b26
detect incompatibility with future mercurial 2.5
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
616
diff
changeset
|
16 |
1823
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
17 from mercurial import ( |
2688
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
18 cmdutil, |
1823
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
19 templatekw, |
2486
cd4290f923b7
template: add precursors template
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
20 node, |
2688
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
21 util |
1823
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
22 ) |
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
23 |
2041
3b6550261614
exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
24 eh = exthelper.exthelper() |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
25 |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
26 ### template keywords |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
27 # XXX it does not handle troubles well :-/ |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
28 |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
29 @eh.templatekw('obsolete') |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
30 def obsoletekw(repo, ctx, templ, **args): |
2926
1abafae41fe2
evolve: use registrar.templatekeyword to register template keyword functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2840
diff
changeset
|
31 """String. Whether the changeset is ``obsolete``. |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
32 """ |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
33 if ctx.obsolete(): |
1732
f4047fba5e90
templates: change {obsolete} to emit only "obsolete" or ""
Martin von Zweigbergk <martinvonz@google.com>
parents:
1729
diff
changeset
|
34 return 'obsolete' |
f4047fba5e90
templates: change {obsolete} to emit only "obsolete" or ""
Martin von Zweigbergk <martinvonz@google.com>
parents:
1729
diff
changeset
|
35 return '' |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
36 |
1399
9ff6d9240f16
template: add a troubles keyword
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
949
diff
changeset
|
37 @eh.templatekw('troubles') |
2271
1af1b0debd4b
template: pass all mapping data to showlist()
Yuya Nishihara <yuya@tcha.org>
parents:
2245
diff
changeset
|
38 def showtroubles(**args): |
2926
1abafae41fe2
evolve: use registrar.templatekeyword to register template keyword functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2840
diff
changeset
|
39 """List of strings. Evolution troubles affecting the changeset |
1399
9ff6d9240f16
template: add a troubles keyword
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
949
diff
changeset
|
40 (zero or more of "unstable", "divergent" or "bumped").""" |
2271
1af1b0debd4b
template: pass all mapping data to showlist()
Yuya Nishihara <yuya@tcha.org>
parents:
2245
diff
changeset
|
41 ctx = args['ctx'] |
2272
eb47d436cdc3
template: adapt to new showlist() API introduced by hg e5eab0fe69ee
Yuya Nishihara <yuya@tcha.org>
parents:
2271
diff
changeset
|
42 try: |
eb47d436cdc3
template: adapt to new showlist() API introduced by hg e5eab0fe69ee
Yuya Nishihara <yuya@tcha.org>
parents:
2271
diff
changeset
|
43 # specify plural= explicitly to trigger TypeError on hg < 4.2 |
2837
cec8609bb396
context: troubles was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2832
diff
changeset
|
44 return templatekw.showlist('trouble', ctx.instabilities(), args, |
2272
eb47d436cdc3
template: adapt to new showlist() API introduced by hg e5eab0fe69ee
Yuya Nishihara <yuya@tcha.org>
parents:
2271
diff
changeset
|
45 plural='troubles') |
eb47d436cdc3
template: adapt to new showlist() API introduced by hg e5eab0fe69ee
Yuya Nishihara <yuya@tcha.org>
parents:
2271
diff
changeset
|
46 except TypeError: |
2837
cec8609bb396
context: troubles was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2832
diff
changeset
|
47 return templatekw.showlist('trouble', ctx.instabilities(), plural='troubles', |
2272
eb47d436cdc3
template: adapt to new showlist() API introduced by hg e5eab0fe69ee
Yuya Nishihara <yuya@tcha.org>
parents:
2271
diff
changeset
|
48 **args) |
2486
cd4290f923b7
template: add precursors template
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
49 |
cd4290f923b7
template: add precursors template
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
50 def closestprecursors(repo, nodeid): |
cd4290f923b7
template: add precursors template
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
51 """ Yield the list of next precursors pointing on visible changectx nodes |
cd4290f923b7
template: add precursors template
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
52 """ |
cd4290f923b7
template: add precursors template
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
53 |
2840
dfad30be866c
context: precursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2837
diff
changeset
|
54 precursors = repo.obsstore.predecessors |
2486
cd4290f923b7
template: add precursors template
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
55 stack = [nodeid] |
cd4290f923b7
template: add precursors template
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
56 |
cd4290f923b7
template: add precursors template
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
57 while stack: |
cd4290f923b7
template: add precursors template
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
58 current = stack.pop() |
cd4290f923b7
template: add precursors template
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
59 currentpreccs = precursors.get(current, ()) |
cd4290f923b7
template: add precursors template
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
60 |
cd4290f923b7
template: add precursors template
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
61 for prec in currentpreccs: |
cd4290f923b7
template: add precursors template
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
62 precnodeid = prec[0] |
cd4290f923b7
template: add precursors template
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
63 |
cd4290f923b7
template: add precursors template
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
64 if precnodeid in repo: |
cd4290f923b7
template: add precursors template
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
65 yield precnodeid |
cd4290f923b7
template: add precursors template
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
66 else: |
cd4290f923b7
template: add precursors template
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
67 stack.append(precnodeid) |
cd4290f923b7
template: add precursors template
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
68 |
cd4290f923b7
template: add precursors template
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
69 @eh.templatekw("precursors") |
2500
2092007af205
template: update precursors template output
Boris Feld <boris.feld@octobus.net>
parents:
2494
diff
changeset
|
70 def shownextvisibleprecursors(repo, ctx, **args): |
2600
e987b403d047
template: fix precursors documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2599
diff
changeset
|
71 """Returns a string containing the list of the closest precursors |
2486
cd4290f923b7
template: add precursors template
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
72 """ |
2500
2092007af205
template: update precursors template output
Boris Feld <boris.feld@octobus.net>
parents:
2494
diff
changeset
|
73 precursors = sorted(closestprecursors(repo, ctx.node())) |
2599
df4a1b02308f
template: used hex-node for the precursors underlying data
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2591
diff
changeset
|
74 precursors = [node.hex(p) for p in precursors] |
2528
8ac4ceac5d96
template: fix successors and precursors templates
Boris Feld <boris.feld@octobus.net>
parents:
2526
diff
changeset
|
75 |
2526
f4acfbb36191
template: fix precursors template for older mercurial version
Boris Feld <boris.feld@octobus.net>
parents:
2502
diff
changeset
|
76 # <= hg-4.1 requires an explicite gen. |
f4acfbb36191
template: fix precursors template for older mercurial version
Boris Feld <boris.feld@octobus.net>
parents:
2502
diff
changeset
|
77 # we can use None once the support is dropped |
2528
8ac4ceac5d96
template: fix successors and precursors templates
Boris Feld <boris.feld@octobus.net>
parents:
2526
diff
changeset
|
78 # |
8ac4ceac5d96
template: fix successors and precursors templates
Boris Feld <boris.feld@octobus.net>
parents:
2526
diff
changeset
|
79 # They also requires an iterator instead of an iterable. |
2599
df4a1b02308f
template: used hex-node for the precursors underlying data
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2591
diff
changeset
|
80 gen = iter(" ".join(p[:12] for p in precursors)) |
2528
8ac4ceac5d96
template: fix successors and precursors templates
Boris Feld <boris.feld@octobus.net>
parents:
2526
diff
changeset
|
81 return templatekw._hybrid(gen.__iter__(), precursors, lambda x: {'precursor': x}, |
2599
df4a1b02308f
template: used hex-node for the precursors underlying data
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2591
diff
changeset
|
82 lambda d: d['precursor'][:12]) |
2487
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
83 |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
84 def closestsuccessors(repo, nodeid): |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
85 """ returns the closest visible successors sets instead. |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
86 """ |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
87 return directsuccessorssets(repo, nodeid) |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
88 |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
89 @eh.templatekw("successors") |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
90 def shownextvisiblesuccessors(repo, ctx, templ, **args): |
2601
20c1e035101b
template: update successors doc
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2600
diff
changeset
|
91 """Returns a string of sets of successors for a changectx |
20c1e035101b
template: update successors doc
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2600
diff
changeset
|
92 |
20c1e035101b
template: update successors doc
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2600
diff
changeset
|
93 Format used is: [ctx1, ctx2], [ctx3] if ctx has been splitted into ctx1 and |
20c1e035101b
template: update successors doc
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2600
diff
changeset
|
94 ctx2 while also diverged into ctx3""" |
2487
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
95 if not ctx.obsolete(): |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
96 return '' |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
97 |
2591
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
98 ssets, _ = closestsuccessors(repo, ctx.node()) |
2602
31d3be16e65c
template: use hex-node in successors
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2601
diff
changeset
|
99 ssets = [[node.hex(n) for n in ss] for ss in ssets] |
2487
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
100 |
2502
d5db7464676d
template: update successors template output
Boris Feld <boris.feld@octobus.net>
parents:
2500
diff
changeset
|
101 data = [] |
d5db7464676d
template: update successors template output
Boris Feld <boris.feld@octobus.net>
parents:
2500
diff
changeset
|
102 gen = [] |
2487
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
103 for ss in ssets: |
2602
31d3be16e65c
template: use hex-node in successors
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2601
diff
changeset
|
104 subgen = '[%s]' % ', '.join(n[:12] for n in ss) |
2502
d5db7464676d
template: update successors template output
Boris Feld <boris.feld@octobus.net>
parents:
2500
diff
changeset
|
105 gen.append(subgen) |
2528
8ac4ceac5d96
template: fix successors and precursors templates
Boris Feld <boris.feld@octobus.net>
parents:
2526
diff
changeset
|
106 h = templatekw._hybrid(iter(subgen), ss, lambda x: {'successor': x}, |
2502
d5db7464676d
template: update successors template output
Boris Feld <boris.feld@octobus.net>
parents:
2500
diff
changeset
|
107 lambda d: "%s" % d["successor"]) |
d5db7464676d
template: update successors template output
Boris Feld <boris.feld@octobus.net>
parents:
2500
diff
changeset
|
108 data.append(h) |
2487
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
109 |
2502
d5db7464676d
template: update successors template output
Boris Feld <boris.feld@octobus.net>
parents:
2500
diff
changeset
|
110 gen = ', '.join(gen) |
2528
8ac4ceac5d96
template: fix successors and precursors templates
Boris Feld <boris.feld@octobus.net>
parents:
2526
diff
changeset
|
111 return templatekw._hybrid(iter(gen), data, lambda x: {'successorset': x}, |
2502
d5db7464676d
template: update successors template output
Boris Feld <boris.feld@octobus.net>
parents:
2500
diff
changeset
|
112 lambda d: d["successorset"]) |
2487
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
113 |
2612
fd35b428edfc
obsfate: by default only display the username if differ from the current one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2611
diff
changeset
|
114 def _getusername(ui): |
fd35b428edfc
obsfate: by default only display the username if differ from the current one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2611
diff
changeset
|
115 """the default username in the config or None""" |
fd35b428edfc
obsfate: by default only display the username if differ from the current one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2611
diff
changeset
|
116 try: |
fd35b428edfc
obsfate: by default only display the username if differ from the current one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2611
diff
changeset
|
117 return ui.username() |
fd35b428edfc
obsfate: by default only display the username if differ from the current one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2611
diff
changeset
|
118 except error.Abort: # no easy way to avoid ui raising Abort here :-/ |
fd35b428edfc
obsfate: by default only display the username if differ from the current one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2611
diff
changeset
|
119 return None |
fd35b428edfc
obsfate: by default only display the username if differ from the current one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2611
diff
changeset
|
120 |
fd35b428edfc
obsfate: by default only display the username if differ from the current one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2611
diff
changeset
|
121 def obsfatedefaulttempl(ui): |
2591
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
122 """ Returns a dict with the default templates for obs fate |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
123 """ |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
124 # Prepare templates |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
125 verbtempl = '{verb}' |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
126 usertempl = '{if(users, " by {join(users, ", ")}")}' |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
127 succtempl = '{if(successors, " as ")}{successors}' # Bypass if limitation |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
128 datetempleq = ' (at {min_date|isodate})' |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
129 datetemplnoteq = ' (between {min_date|isodate} and {max_date|isodate})' |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
130 datetempl = '{if(max_date, "{ifeq(min_date, max_date, "%s", "%s")}")}' % (datetempleq, datetemplnoteq) |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
131 |
2612
fd35b428edfc
obsfate: by default only display the username if differ from the current one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2611
diff
changeset
|
132 optionalusertempl = usertempl |
fd35b428edfc
obsfate: by default only display the username if differ from the current one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2611
diff
changeset
|
133 username = _getusername(ui) |
fd35b428edfc
obsfate: by default only display the username if differ from the current one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2611
diff
changeset
|
134 if username is not None: |
fd35b428edfc
obsfate: by default only display the username if differ from the current one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2611
diff
changeset
|
135 optionalusertempl = ('{ifeq(join(users, "\0"), "%s", "", "%s")}' |
fd35b428edfc
obsfate: by default only display the username if differ from the current one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2611
diff
changeset
|
136 % (username, usertempl)) |
fd35b428edfc
obsfate: by default only display the username if differ from the current one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2611
diff
changeset
|
137 |
2591
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
138 # Assemble them |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
139 return { |
2629
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
140 'obsfate_quiet': verbtempl + succtempl, |
2832
07b9fcf8b6d3
output: update obsfate / obslog output order
Boris Feld <boris.feld@octobus.net>
parents:
2690
diff
changeset
|
141 'obsfate': verbtempl + succtempl + optionalusertempl, |
07b9fcf8b6d3
output: update obsfate / obslog output order
Boris Feld <boris.feld@octobus.net>
parents:
2690
diff
changeset
|
142 'obsfate_verbose': verbtempl + succtempl + usertempl + datetempl, |
2591
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
143 } |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
144 |
2685
008f7cd1fcbe
obsfate: refactor obsfate data computing
Boris Feld <boris.feld@octobus.net>
parents:
2629
diff
changeset
|
145 def obsfatedata(repo, ctx): |
008f7cd1fcbe
obsfate: refactor obsfate data computing
Boris Feld <boris.feld@octobus.net>
parents:
2629
diff
changeset
|
146 """compute the raw data needed for computing obsfate |
008f7cd1fcbe
obsfate: refactor obsfate data computing
Boris Feld <boris.feld@octobus.net>
parents:
2629
diff
changeset
|
147 Returns a list of dict |
008f7cd1fcbe
obsfate: refactor obsfate data computing
Boris Feld <boris.feld@octobus.net>
parents:
2629
diff
changeset
|
148 """ |
2489
84a8219a2f9a
template: add the obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2487
diff
changeset
|
149 if not ctx.obsolete(): |
2685
008f7cd1fcbe
obsfate: refactor obsfate data computing
Boris Feld <boris.feld@octobus.net>
parents:
2629
diff
changeset
|
150 return None |
2489
84a8219a2f9a
template: add the obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2487
diff
changeset
|
151 |
2591
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
152 successorssets, pathcache = closestsuccessors(repo, ctx.node()) |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
153 |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
154 # closestsuccessors returns an empty list for pruned revisions, remap it |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
155 # into a list containing en empty list for future processing |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
156 if successorssets == []: |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
157 successorssets = [[]] |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
158 |
2611
45f5dbb24684
obsfate: display more data about direct prune markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2610
diff
changeset
|
159 succsmap = repo.obsstore.successors |
45f5dbb24684
obsfate: display more data about direct prune markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2610
diff
changeset
|
160 fullsuccessorsets = [] # successor set + markers |
2605
7d9608219362
obsfate: rename 'successorsset' to 'sset' in the loop
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2603
diff
changeset
|
161 for sset in successorssets: |
2611
45f5dbb24684
obsfate: display more data about direct prune markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2610
diff
changeset
|
162 if sset: |
45f5dbb24684
obsfate: display more data about direct prune markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2610
diff
changeset
|
163 markers = obshistory.successorsetallmarkers(sset, pathcache) |
45f5dbb24684
obsfate: display more data about direct prune markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2610
diff
changeset
|
164 fullsuccessorsets.append((sset, markers)) |
45f5dbb24684
obsfate: display more data about direct prune markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2610
diff
changeset
|
165 else: |
45f5dbb24684
obsfate: display more data about direct prune markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2610
diff
changeset
|
166 # XXX we do not catch all prune markers (eg rewritten then pruned) |
45f5dbb24684
obsfate: display more data about direct prune markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2610
diff
changeset
|
167 # (fix me later) |
45f5dbb24684
obsfate: display more data about direct prune markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2610
diff
changeset
|
168 foundany = False |
45f5dbb24684
obsfate: display more data about direct prune markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2610
diff
changeset
|
169 for mark in succsmap.get(ctx.node(), ()): |
45f5dbb24684
obsfate: display more data about direct prune markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2610
diff
changeset
|
170 if not mark[1]: |
45f5dbb24684
obsfate: display more data about direct prune markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2610
diff
changeset
|
171 foundany = True |
45f5dbb24684
obsfate: display more data about direct prune markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2610
diff
changeset
|
172 fullsuccessorsets.append((sset, [mark])) |
45f5dbb24684
obsfate: display more data about direct prune markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2610
diff
changeset
|
173 if not foundany: |
45f5dbb24684
obsfate: display more data about direct prune markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2610
diff
changeset
|
174 fullsuccessorsets.append(([], [])) |
45f5dbb24684
obsfate: display more data about direct prune markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2610
diff
changeset
|
175 |
45f5dbb24684
obsfate: display more data about direct prune markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2610
diff
changeset
|
176 values = [] |
45f5dbb24684
obsfate: display more data about direct prune markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2610
diff
changeset
|
177 for sset, rawmarkers in fullsuccessorsets: |
2610
ee37ab3de5f7
obsfate: split markers fetch from successor set annotation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2608
diff
changeset
|
178 raw = obshistory.preparesuccessorset(sset, rawmarkers) |
2685
008f7cd1fcbe
obsfate: refactor obsfate data computing
Boris Feld <boris.feld@octobus.net>
parents:
2629
diff
changeset
|
179 values.append(raw) |
2591
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
180 |
2685
008f7cd1fcbe
obsfate: refactor obsfate data computing
Boris Feld <boris.feld@octobus.net>
parents:
2629
diff
changeset
|
181 return values |
008f7cd1fcbe
obsfate: refactor obsfate data computing
Boris Feld <boris.feld@octobus.net>
parents:
2629
diff
changeset
|
182 |
2688
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
183 def obsfatelineprinter(obsfateline, ui): |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
184 quiet = ui.quiet |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
185 verbose = ui.verbose |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
186 normal = not verbose and not quiet |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
187 |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
188 # Build the line step by step |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
189 line = [] |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
190 |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
191 # Verb |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
192 line.append(obsfateline['verb']) |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
193 |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
194 # Users |
2690
5d839e1f0ce9
template: handle lack of "users" in the obsfate data
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2688
diff
changeset
|
195 if (verbose or normal) and 'users' in obsfateline: |
2688
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
196 users = obsfateline['users'] |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
197 |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
198 if normal: |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
199 username = _getusername(ui) |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
200 users = [user for user in users if user != username] |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
201 |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
202 if users: |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
203 line.append(" by %s" % ",".join(users)) |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
204 |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
205 # Successors |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
206 successors = obsfateline["successors"] |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
207 |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
208 if successors: |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
209 fmtsuccessors = map(lambda s: s[:12], successors) |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
210 line.append(" as %s" % ", ".join(fmtsuccessors)) |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
211 |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
212 # Date |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
213 if verbose: |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
214 min_date = obsfateline['min_date'] |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
215 max_date = obsfateline['max_date'] |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
216 |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
217 if min_date == max_date: |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
218 fmtmin_date = util.datestr(min_date, '%Y-%m-%d %H:%M %1%2') |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
219 line.append(" (at %s)" % fmtmin_date) |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
220 else: |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
221 fmtmin_date = util.datestr(min_date, '%Y-%m-%d %H:%M %1%2') |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
222 fmtmax_date = util.datestr(max_date, '%Y-%m-%d %H:%M %1%2') |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
223 line.append(" (between %s and %s)" % (fmtmin_date, fmtmax_date)) |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
224 |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
225 return "".join(line) |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
226 |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
227 def obsfateprinter(obsfate, ui, prefix=""): |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
228 lines = [] |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
229 for raw in obsfate: |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
230 lines.append(obsfatelineprinter(raw, ui)) |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
231 |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
232 if prefix: |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
233 lines = [prefix + line for line in lines] |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
234 |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
235 return "\n".join(lines) |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
236 |
2685
008f7cd1fcbe
obsfate: refactor obsfate data computing
Boris Feld <boris.feld@octobus.net>
parents:
2629
diff
changeset
|
237 @eh.templatekw("obsfate") |
008f7cd1fcbe
obsfate: refactor obsfate data computing
Boris Feld <boris.feld@octobus.net>
parents:
2629
diff
changeset
|
238 def showobsfate(repo, ctx, **args): |
008f7cd1fcbe
obsfate: refactor obsfate data computing
Boris Feld <boris.feld@octobus.net>
parents:
2629
diff
changeset
|
239 # Get the needed obsfate data |
008f7cd1fcbe
obsfate: refactor obsfate data computing
Boris Feld <boris.feld@octobus.net>
parents:
2629
diff
changeset
|
240 values = obsfatedata(repo, ctx) |
008f7cd1fcbe
obsfate: refactor obsfate data computing
Boris Feld <boris.feld@octobus.net>
parents:
2629
diff
changeset
|
241 |
008f7cd1fcbe
obsfate: refactor obsfate data computing
Boris Feld <boris.feld@octobus.net>
parents:
2629
diff
changeset
|
242 if values is None: |
008f7cd1fcbe
obsfate: refactor obsfate data computing
Boris Feld <boris.feld@octobus.net>
parents:
2629
diff
changeset
|
243 return '' |
008f7cd1fcbe
obsfate: refactor obsfate data computing
Boris Feld <boris.feld@octobus.net>
parents:
2629
diff
changeset
|
244 |
008f7cd1fcbe
obsfate: refactor obsfate data computing
Boris Feld <boris.feld@octobus.net>
parents:
2629
diff
changeset
|
245 # Format each successorset successors list |
008f7cd1fcbe
obsfate: refactor obsfate data computing
Boris Feld <boris.feld@octobus.net>
parents:
2629
diff
changeset
|
246 for raw in values: |
2591
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
247 # As we can't do something like |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
248 # "{join(map(nodeshort, successors), ', '}" in template, manually |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
249 # create a correct textual representation |
2603
23f1c3b9052f
template: use hex successors in obsfate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2602
diff
changeset
|
250 gen = ', '.join(n[:12] for n in raw['successors']) |
2591
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
251 |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
252 makemap = lambda x: {'successor': x} |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
253 joinfmt = lambda d: "%s" % d['successor'] |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
254 raw['successors'] = templatekw._hybrid(gen, raw['successors'], makemap, |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
255 joinfmt) |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
256 |
2685
008f7cd1fcbe
obsfate: refactor obsfate data computing
Boris Feld <boris.feld@octobus.net>
parents:
2629
diff
changeset
|
257 # And then format them |
2591
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
258 # Insert default obsfate templates |
2612
fd35b428edfc
obsfate: by default only display the username if differ from the current one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2611
diff
changeset
|
259 args['templ'].cache.update(obsfatedefaulttempl(repo.ui)) |
2591
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
260 |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
261 if repo.ui.quiet: |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
262 name = "obsfate_quiet" |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
263 elif repo.ui.verbose: |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
264 name = "obsfate_verbose" |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
265 elif repo.ui.debugflag: |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
266 name = "obsfate_debug" |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
267 else: |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
268 name = "obsfate" |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
269 |
2629
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
270 # Format a single value |
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
271 def fmt(d): |
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
272 nargs = args.copy() |
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
273 nargs.update(d[name]) |
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
274 return args['templ'](name, **nargs) |
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
275 |
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
276 # Generate a good enough string representation using templater |
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
277 gen = [] |
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
278 for d in values: |
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
279 chunk = fmt({name: d}) |
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
280 chunkstr = [] |
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
281 |
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
282 # Empty the generator |
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
283 try: |
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
284 while True: |
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
285 chunkstr.append(chunk.next()) |
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
286 except StopIteration: |
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
287 pass |
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
288 |
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
289 gen.append("".join(chunkstr)) |
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
290 gen = "; ".join(gen) |
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
291 |
9c0f6b85c28f
obsfate: improve obsfate output
Boris Feld <boris.feld@octobus.net>
parents:
2613
diff
changeset
|
292 return templatekw._hybrid(gen, values, lambda x: {name: x}, fmt) |
2489
84a8219a2f9a
template: add the obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2487
diff
changeset
|
293 |
2688
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
294 # Check if we can hook directly on the changeset_printer |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
295 if util.safehasattr(cmdutil.changeset_printer, '_exthook'): |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
296 @eh.wrapfunction(cmdutil.changeset_printer, '_exthook') |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
297 def exthook(original, self, ctx): |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
298 # Call potential other extensions |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
299 original(self, ctx) |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
300 |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
301 obsfate = obsfatedata(self.repo, ctx) |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
302 if obsfate is None: |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
303 return "" |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
304 |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
305 output = obsfateprinter(obsfate, self.ui, prefix="obsolete: ") |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
306 |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
307 self.ui.write(output, label='log.obsfate') |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
308 self.ui.write("\n") |
b6e50897b94e
obsfate: override the default log output
Boris Feld <boris.feld@octobus.net>
parents:
2685
diff
changeset
|
309 |
2487
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
310 # copy from mercurial.obsolete with a small change to stop at first known changeset. |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
311 |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
312 def directsuccessorssets(repo, initialnode, cache=None): |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
313 """return set of all direct successors of initial nodes |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
314 """ |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
315 |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
316 succmarkers = repo.obsstore.successors |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
317 |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
318 # Stack of nodes we search successors sets for |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
319 toproceed = [initialnode] |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
320 # set version of above list for fast loop detection |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
321 # element added to "toproceed" must be added here |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
322 stackedset = set(toproceed) |
2591
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
323 |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
324 pathscache = {} |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
325 |
2487
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
326 if cache is None: |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
327 cache = {} |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
328 while toproceed: |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
329 current = toproceed[-1] |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
330 if current in cache: |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
331 stackedset.remove(toproceed.pop()) |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
332 elif current != initialnode and current in repo: |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
333 # We have a valid direct successors. |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
334 cache[current] = [(current,)] |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
335 elif current not in succmarkers: |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
336 if current in repo: |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
337 # We have a valid last successors. |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
338 cache[current] = [(current,)] |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
339 else: |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
340 # Final obsolete version is unknown locally. |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
341 # Do not count that as a valid successors |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
342 cache[current] = [] |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
343 else: |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
344 for mark in sorted(succmarkers[current]): |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
345 for suc in mark[1]: |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
346 if suc not in cache: |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
347 if suc in stackedset: |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
348 # cycle breaking |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
349 cache[suc] = [] |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
350 else: |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
351 # case (3) If we have not computed successors sets |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
352 # of one of those successors we add it to the |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
353 # `toproceed` stack and stop all work for this |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
354 # iteration. |
2591
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
355 pathscache.setdefault(suc, []).append((current, mark)) |
2487
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
356 toproceed.append(suc) |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
357 stackedset.add(suc) |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
358 break |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
359 else: |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
360 continue |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
361 break |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
362 else: |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
363 succssets = [] |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
364 for mark in sorted(succmarkers[current]): |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
365 # successors sets contributed by this marker |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
366 markss = [[]] |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
367 for suc in mark[1]: |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
368 # cardinal product with previous successors |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
369 productresult = [] |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
370 for prefix in markss: |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
371 for suffix in cache[suc]: |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
372 newss = list(prefix) |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
373 for part in suffix: |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
374 # do not duplicated entry in successors set |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
375 # first entry wins. |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
376 if part not in newss: |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
377 newss.append(part) |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
378 productresult.append(newss) |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
379 markss = productresult |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
380 succssets.extend(markss) |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
381 # remove duplicated and subset |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
382 seen = [] |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
383 final = [] |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
384 candidate = sorted(((set(s), s) for s in succssets if s), |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
385 key=lambda x: len(x[1]), reverse=True) |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
386 for setversion, listversion in candidate: |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
387 for seenset in seen: |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
388 if setversion.issubset(seenset): |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
389 break |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
390 else: |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
391 final.append(listversion) |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
392 seen.append(setversion) |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
393 final.reverse() # put small successors set first |
590da9c523ae
template: add successors template
Boris Feld <boris.feld@octobus.net>
parents:
2486
diff
changeset
|
394 cache[current] = final |
2591
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
395 |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2528
diff
changeset
|
396 return cache[initialnode], pathscache |