Mercurial > evolve
annotate hgext3rd/evolve/obshistory.py @ 2411:bd937b7ce7d2
debugobshistory: handle multiple cycles
We previously handled up to one cycle only. This is now fixed.
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Thu, 18 May 2017 14:58:22 +0200 |
parents | 783a74c60a5e |
children | 89a5dabbb43d |
rev | line source |
---|---|
2403
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
1 # Code dedicated to display and exploration of the obsolescence history |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
2 # |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
3 # This module content aims at being upstreamed enventually. |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
4 # |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
5 # Copyright 2017 Octobus SAS <contact@octobus.net> |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
6 # |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
7 # This software may be used and distributed according to the terms of the |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
8 # GNU General Public License version 2 or any later version. |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
9 |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
10 from mercurial import ( |
2406
31255706b591
obshistory: import 'node' as 'nodemod'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2404
diff
changeset
|
11 node as nodemod, |
2407
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
12 cmdutil, |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
13 graphmod, |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
14 error |
2403
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
15 ) |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
16 |
2407
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
17 class obsmarker_printer(cmdutil.changeset_printer): |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
18 """show (available) information about a node |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
19 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
20 We display the node, description (if available) and various information |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
21 about obsolescence markers affecting it""" |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
22 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
23 def show(self, ctx, copies=None, matchfn=None, **props): |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
24 if self.buffered: |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
25 self.ui.pushbuffer(labeled=True) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
26 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
27 changenode = ctx.node() |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
28 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
29 fm = self.ui.formatter('debugobshistory', props) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
30 _debugobshistorydisplaynode(fm, self.repo, changenode) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
31 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
32 succs = self.repo.obsstore.successors.get(changenode, ()) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
33 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
34 markerfm = fm.nested("debugobshistory.markers") |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
35 for successor in sorted(succs): |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
36 _debugobshistorydisplaymarker(markerfm, self.repo, successor) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
37 markerfm.end() |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
38 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
39 markerfm.plain('\n') |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
40 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
41 self.hunk[ctx.node()] = self.ui.popbuffer() |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
42 else: |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
43 ### graph output is buffered only |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
44 msg = 'cannot be used outside of the graphlog (yet)' |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
45 raise error.ProgrammingError(msg) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
46 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
47 def flush(self, ctx): |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
48 ''' changeset_printer has some logic around buffering data |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
49 in self.headers that we don't use |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
50 ''' |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
51 pass |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
52 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
53 class missingchangectx(object): |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
54 ''' a minimal object mimicking changectx for change contexts |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
55 references by obs markers but not available locally ''' |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
56 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
57 def __init__(self, repo, nodeid): |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
58 self._repo = repo |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
59 self._node = nodeid |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
60 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
61 def node(self): |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
62 return self._node |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
63 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
64 def obsolete(self): |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
65 # If we don't have it locally, it's obsolete |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
66 return True |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
67 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
68 def cyclic(graph): |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
69 """Return True if the directed graph has a cycle. |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
70 The graph must be represented as a dictionary mapping vertices to |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
71 iterables of neighbouring vertices. For example: |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
72 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
73 >>> cyclic({1: (2,), 2: (3,), 3: (1,)}) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
74 True |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
75 >>> cyclic({1: (2,), 2: (3,), 3: (4,)}) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
76 False |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
77 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
78 Taken from: https://codereview.stackexchange.com/a/86067 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
79 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
80 """ |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
81 visited = set() |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
82 o = object() |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
83 path = [o] |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
84 path_set = set(path) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
85 stack = [iter(graph)] |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
86 while stack: |
2411
bd937b7ce7d2
debugobshistory: handle multiple cycles
Boris Feld <boris.feld@octobus.net>
parents:
2407
diff
changeset
|
87 for v in sorted(stack[-1]): |
2407
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
88 if v in path_set: |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
89 path_set.remove(o) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
90 return path_set |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
91 elif v not in visited: |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
92 visited.add(v) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
93 path.append(v) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
94 path_set.add(v) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
95 stack.append(iter(graph.get(v, ()))) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
96 break |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
97 else: |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
98 path_set.remove(path.pop()) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
99 stack.pop() |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
100 return False |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
101 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
102 def _obshistorywalker(repo, revs): |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
103 """ Directly inspired by graphmod.dagwalker, |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
104 walk the obs marker tree and yield |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
105 (id, CHANGESET, ctx, [parentinfo]) tuples |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
106 """ |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
107 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
108 # Get the list of nodes and links between them |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
109 candidates, nodesucc, nodeprec = _obshistorywalker_links(repo, revs) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
110 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
111 # Shown, set of nodes presents in items |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
112 shown = set() |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
113 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
114 def isvalidcandidate(candidate): |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
115 """ Function to filter candidates, check the candidate succ are |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
116 in shown set |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
117 """ |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
118 return nodesucc.get(candidate, set()).issubset(shown) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
119 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
120 # While we have some nodes to show |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
121 while candidates: |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
122 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
123 # Filter out candidates, returns only nodes with all their successors |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
124 # already shown |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
125 validcandidates = filter(isvalidcandidate, candidates) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
126 |
2411
bd937b7ce7d2
debugobshistory: handle multiple cycles
Boris Feld <boris.feld@octobus.net>
parents:
2407
diff
changeset
|
127 # If we likely have a cycle |
bd937b7ce7d2
debugobshistory: handle multiple cycles
Boris Feld <boris.feld@octobus.net>
parents:
2407
diff
changeset
|
128 if not validcandidates: |
bd937b7ce7d2
debugobshistory: handle multiple cycles
Boris Feld <boris.feld@octobus.net>
parents:
2407
diff
changeset
|
129 cycle = cyclic(nodesucc) |
bd937b7ce7d2
debugobshistory: handle multiple cycles
Boris Feld <boris.feld@octobus.net>
parents:
2407
diff
changeset
|
130 assert cycle |
2407
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
131 |
2411
bd937b7ce7d2
debugobshistory: handle multiple cycles
Boris Feld <boris.feld@octobus.net>
parents:
2407
diff
changeset
|
132 # Then choose a random node from the cycle |
bd937b7ce7d2
debugobshistory: handle multiple cycles
Boris Feld <boris.feld@octobus.net>
parents:
2407
diff
changeset
|
133 breaknode = sorted(cycle)[0] |
bd937b7ce7d2
debugobshistory: handle multiple cycles
Boris Feld <boris.feld@octobus.net>
parents:
2407
diff
changeset
|
134 # And display it by force |
bd937b7ce7d2
debugobshistory: handle multiple cycles
Boris Feld <boris.feld@octobus.net>
parents:
2407
diff
changeset
|
135 repo.ui.debug('obs-cycle detected, forcing display of %s\n' |
bd937b7ce7d2
debugobshistory: handle multiple cycles
Boris Feld <boris.feld@octobus.net>
parents:
2407
diff
changeset
|
136 % nodemod.short(breaknode)) |
bd937b7ce7d2
debugobshistory: handle multiple cycles
Boris Feld <boris.feld@octobus.net>
parents:
2407
diff
changeset
|
137 validcandidates = [breaknode] |
bd937b7ce7d2
debugobshistory: handle multiple cycles
Boris Feld <boris.feld@octobus.net>
parents:
2407
diff
changeset
|
138 |
bd937b7ce7d2
debugobshistory: handle multiple cycles
Boris Feld <boris.feld@octobus.net>
parents:
2407
diff
changeset
|
139 # Display all valid candidates |
2407
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
140 for cand in sorted(validcandidates): |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
141 # Remove candidate from candidates set |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
142 candidates.remove(cand) |
2411
bd937b7ce7d2
debugobshistory: handle multiple cycles
Boris Feld <boris.feld@octobus.net>
parents:
2407
diff
changeset
|
143 # And remove it from nodesucc in case of future cycle detected |
bd937b7ce7d2
debugobshistory: handle multiple cycles
Boris Feld <boris.feld@octobus.net>
parents:
2407
diff
changeset
|
144 try: |
bd937b7ce7d2
debugobshistory: handle multiple cycles
Boris Feld <boris.feld@octobus.net>
parents:
2407
diff
changeset
|
145 del nodesucc[cand] |
bd937b7ce7d2
debugobshistory: handle multiple cycles
Boris Feld <boris.feld@octobus.net>
parents:
2407
diff
changeset
|
146 except KeyError: |
bd937b7ce7d2
debugobshistory: handle multiple cycles
Boris Feld <boris.feld@octobus.net>
parents:
2407
diff
changeset
|
147 pass |
bd937b7ce7d2
debugobshistory: handle multiple cycles
Boris Feld <boris.feld@octobus.net>
parents:
2407
diff
changeset
|
148 |
2407
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
149 shown.add(cand) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
150 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
151 # Add the right changectx class |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
152 if cand in repo: |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
153 changectx = repo[cand] |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
154 else: |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
155 changectx = missingchangectx(repo, cand) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
156 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
157 childrens = [(graphmod.PARENT, x) for x in nodeprec.get(cand, ())] |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
158 yield (cand, 'M', changectx, childrens) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
159 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
160 def _obshistorywalker_links(repo, revs): |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
161 """ Iterate the obs history tree starting from revs, traversing |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
162 each revision precursors recursively. |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
163 Return a tuple of: |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
164 - The list of node crossed |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
165 - The dictionnary of each node successors, values are a set |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
166 - The dictionnary of each node precursors, values are a list |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
167 """ |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
168 precursors = repo.obsstore.precursors |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
169 nodec = repo.changelog.node |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
170 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
171 # Parents, set of parents nodes seen during walking the graph for node |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
172 nodesucc = dict() |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
173 # Childrens |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
174 nodeprec = dict() |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
175 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
176 nodes = [nodec(r) for r in revs] |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
177 seen = set(nodes) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
178 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
179 # Iterate on each node |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
180 while nodes: |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
181 node = nodes.pop() |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
182 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
183 precs = precursors.get(node, ()) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
184 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
185 nodeprec[node] = [] |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
186 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
187 for prec in sorted(precs): |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
188 precnode = prec[0] |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
189 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
190 # Mark node as prec successor |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
191 nodesucc.setdefault(precnode, set()).add(node) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
192 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
193 # Mark precnode as node precursor |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
194 nodeprec[node].append(precnode) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
195 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
196 # Add prec for future processing if not node already processed |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
197 if precnode not in seen: |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
198 seen.add(precnode) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
199 nodes.append(precnode) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
200 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
201 return sorted(seen), nodesucc, nodeprec |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
202 |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
203 def _debugobshistorygraph(ui, repo, revs, opts): |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
204 displayer = obsmarker_printer(ui, repo.unfiltered(), None, opts, buffered=True) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
205 edges = graphmod.asciiedges |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
206 cmdutil.displaygraph(ui, repo, _obshistorywalker(repo.unfiltered(), revs), displayer, edges) |
783a74c60a5e
obshistory: add a graph option on the debugobshistory command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2406
diff
changeset
|
207 |
2403
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
208 def _debugobshistorysingle(fm, repo, revs): |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
209 """ Display the obsolescence history for a single revision |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
210 """ |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
211 precursors = repo.obsstore.precursors |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
212 successors = repo.obsstore.successors |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
213 nodec = repo.changelog.node |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
214 nodes = [nodec(r) for r in revs] |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
215 |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
216 seen = set(nodes) |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
217 |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
218 while nodes: |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
219 ctxnode = nodes.pop() |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
220 |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
221 _debugobshistorydisplaynode(fm, repo, ctxnode) |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
222 |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
223 succs = successors.get(ctxnode, ()) |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
224 |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
225 markerfm = fm.nested("debugobshistory.markers") |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
226 for successor in sorted(succs): |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
227 _debugobshistorydisplaymarker(markerfm, repo, successor) |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
228 markerfm.end() |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
229 |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
230 precs = precursors.get(ctxnode, ()) |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
231 for p in sorted(precs): |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
232 # Only show nodes once |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
233 if p[0] not in seen: |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
234 seen.add(p[0]) |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
235 nodes.append(p[0]) |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
236 |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
237 def _debugobshistorydisplaynode(fm, repo, node): |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
238 if node in repo.unfiltered(): |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
239 _debugobshistorydisplayctx(fm, repo.unfiltered()[node]) |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
240 else: |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
241 _debugobshistorydisplaymissingctx(fm, node) |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
242 |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
243 def _debugobshistorydisplayctx(fm, ctx): |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
244 shortdescription = ctx.description().splitlines()[0] |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
245 |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
246 fm.startitem() |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
247 fm.write('debugobshistory.node', '%s', str(ctx), |
2404
c07f752137f4
label: rename 'evolve.short_node' to 'evolve.node'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2403
diff
changeset
|
248 label="evolve.node") |
2403
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
249 fm.plain(' ') |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
250 |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
251 fm.write('debugobshistory.rev', '(%d)', int(ctx), |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
252 label="evolve.rev") |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
253 fm.plain(' ') |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
254 |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
255 fm.write('debugobshistory.shortdescription', '%s', shortdescription, |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
256 label="evolve.short_description") |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
257 fm.plain('\n') |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
258 |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
259 def _debugobshistorydisplaymissingctx(fm, nodewithoutctx): |
2406
31255706b591
obshistory: import 'node' as 'nodemod'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2404
diff
changeset
|
260 hexnode = nodemod.short(nodewithoutctx) |
2403
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
261 fm.startitem() |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
262 fm.write('debugobshistory.node', '%s', hexnode, |
2404
c07f752137f4
label: rename 'evolve.short_node' to 'evolve.node'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2403
diff
changeset
|
263 label="evolve.node evolve.missing_change_ctx") |
2403
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
264 fm.plain('\n') |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
265 |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
266 def _debugobshistorydisplaymarker(fm, repo, marker): |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
267 succnodes = marker[1] |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
268 date = marker[4] |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
269 metadata = dict(marker[3]) |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
270 |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
271 fm.startitem() |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
272 fm.plain(' ') |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
273 |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
274 # Detect pruned revisions |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
275 if len(succnodes) == 0: |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
276 verb = 'pruned' |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
277 else: |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
278 verb = 'rewritten' |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
279 |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
280 fm.write('debugobshistory.verb', '%s', verb, |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
281 label="evolve.verb") |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
282 fm.plain(' by ') |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
283 |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
284 fm.write('debugobshistory.marker_user', '%s', metadata['user'], |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
285 label="evolve.user") |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
286 fm.plain(' ') |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
287 |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
288 fm.write('debugobshistory.marker_date', '(%s)', fm.formatdate(date), |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
289 label="evolve.date") |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
290 |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
291 if len(succnodes) > 0: |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
292 fm.plain(' as ') |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
293 |
2406
31255706b591
obshistory: import 'node' as 'nodemod'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2404
diff
changeset
|
294 shortsnodes = (nodemod.short(succnode) for succnode in sorted(succnodes)) |
2403
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
295 nodes = fm.formatlist(shortsnodes, 'debugobshistory.succnodes', sep=', ') |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
296 fm.write('debugobshistory.succnodes', '%s', nodes, |
2404
c07f752137f4
label: rename 'evolve.short_node' to 'evolve.node'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2403
diff
changeset
|
297 label="evolve.node") |
2403
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
298 |
1b348702d79e
obshistory: refactor debugobshistory
Boris Feld <boris.feld@octobus.net>
parents:
diff
changeset
|
299 fm.plain("\n") |