annotate hgext/graphlog.py @ 17162:868c256cb51b

graphlog: remove unused get_revs() function
author Patrick Mezard <patrick@mezard.eu>
date Wed, 11 Jul 2012 17:05:20 +0200
parents 01d847e0fdc9
children 4c5d7124661a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
1 # ASCII graph log extension for Mercurial
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
2 #
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
3 # Copyright 2007 Joel Rosdahl <joel@rosdahl.net>
4516
96d8a56d4ef9 Removed trailing whitespace and tabs from python files
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4509
diff changeset
4 #
8225
46293a0c7e9f updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents: 8210
diff changeset
5 # This software may be used and distributed according to the terms of the
10263
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 10097
diff changeset
6 # GNU General Public License version 2 or any later version.
8228
eee2319c5895 add blank line after copyright notices and after header
Martin Geisler <mg@lazybytes.net>
parents: 8225
diff changeset
7
8934
9dda4c73fc3b extensions: change descriptions for extensions providing a few commands
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8932
diff changeset
8 '''command to view revision graphs from a shell
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
9
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
10 This extension adds a --graph option to the incoming, outgoing and log
9259
19a4b8fd5c48 graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9198
diff changeset
11 commands. When this options is given, an ASCII representation of the
19a4b8fd5c48 graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9198
diff changeset
12 revision graph is also shown.
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
13 '''
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
14
14319
b33f3e35efb0 scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents: 14311
diff changeset
15 from mercurial.cmdutil import show_changeset
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
16 from mercurial.i18n import _
14319
b33f3e35efb0 scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents: 14311
diff changeset
17 from mercurial import cmdutil, commands, extensions, scmutil
16412
1a10bee86e33 graphlog: cleanup before code move
Patrick Mezard <patrick@mezard.eu>
parents: 16411
diff changeset
18 from mercurial import hg, util, graphmod, templatekw, revset
5938
9ed100559851 graphlog: add filelog revision grapher
Steve Borho <steve@borho.org>
parents: 4735
diff changeset
19
14311
9bbac962f4dd graphlog: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents: 14139
diff changeset
20 cmdtable = {}
9bbac962f4dd graphlog: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents: 14139
diff changeset
21 command = cmdutil.command(cmdtable)
16743
38caf405d010 hgext: mark all first-party extensions as such
Augie Fackler <raf@durin42.com>
parents: 16434
diff changeset
22 testedwith = 'internal'
14311
9bbac962f4dd graphlog: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents: 14139
diff changeset
23
8840
d9acbe7b0049 graphmod/graphlog: make dag walks carry data as type, payload
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8839
diff changeset
24 ASCIIDATA = 'ASC'
d9acbe7b0049 graphmod/graphlog: make dag walks carry data as type, payload
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8839
diff changeset
25
14130
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
26 def asciiedges(type, char, lines, seen, rev, parents):
8840
d9acbe7b0049 graphmod/graphlog: make dag walks carry data as type, payload
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8839
diff changeset
27 """adds edge info to changelog DAG walk suitable for ascii()"""
9369
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
28 if rev not in seen:
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
29 seen.append(rev)
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
30 nodeidx = seen.index(rev)
5938
9ed100559851 graphlog: add filelog revision grapher
Steve Borho <steve@borho.org>
parents: 4735
diff changeset
31
9369
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
32 knownparents = []
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
33 newparents = []
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
34 for parent in parents:
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
35 if parent in seen:
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
36 knownparents.append(parent)
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
37 else:
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
38 newparents.append(parent)
5938
9ed100559851 graphlog: add filelog revision grapher
Steve Borho <steve@borho.org>
parents: 4735
diff changeset
39
9369
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
40 ncols = len(seen)
14130
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
41 nextseen = seen[:]
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
42 nextseen[nodeidx:nodeidx + 1] = newparents
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
43 edges = [(nodeidx, nextseen.index(p)) for p in knownparents]
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
44
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
45 while len(newparents) > 2:
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
46 # ascii() only knows how to add or remove a single column between two
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
47 # calls. Nodes with more than two parents break this constraint so we
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
48 # introduce intermediate expansion lines to grow the active node list
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
49 # slowly.
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
50 edges.append((nodeidx, nodeidx))
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
51 edges.append((nodeidx, nodeidx + 1))
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
52 nmorecols = 1
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
53 yield (type, char, lines, (nodeidx, edges, ncols, nmorecols))
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
54 char = '\\'
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
55 lines = []
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
56 nodeidx += 1
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
57 ncols += 1
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
58 edges = []
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
59 del newparents[0]
7370
7bc62ebe7693 graphlog: refactor common grapher code
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7369
diff changeset
60
9369
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
61 if len(newparents) > 0:
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
62 edges.append((nodeidx, nodeidx))
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
63 if len(newparents) > 1:
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
64 edges.append((nodeidx, nodeidx + 1))
14130
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
65 nmorecols = len(nextseen) - ncols
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
66 seen[:] = nextseen
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
67 yield (type, char, lines, (nodeidx, edges, ncols, nmorecols))
5938
9ed100559851 graphlog: add filelog revision grapher
Steve Borho <steve@borho.org>
parents: 4735
diff changeset
68
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
69 def fix_long_right_edges(edges):
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
70 for (i, (start, end)) in enumerate(edges):
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
71 if end > start:
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
72 edges[i] = (start, end + 1)
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
73
7326
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
74 def get_nodeline_edges_tail(
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
75 node_index, p_node_index, n_columns, n_columns_diff, p_diff, fix_tail):
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
76 if fix_tail and n_columns_diff == p_diff and n_columns_diff != 0:
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
77 # Still going in the same non-vertical direction.
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
78 if n_columns_diff == -1:
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
79 start = max(node_index + 1, p_node_index)
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
80 tail = ["|", " "] * (start - node_index - 1)
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
81 tail.extend(["/", " "] * (n_columns - start))
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
82 return tail
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
83 else:
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
84 return ["\\", " "] * (n_columns - node_index - 1)
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
85 else:
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
86 return ["|", " "] * (n_columns - node_index - 1)
ba7ab8c4a577 graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7325
diff changeset
87
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
88 def draw_edges(edges, nodeline, interline):
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
89 for (start, end) in edges:
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
90 if start == end + 1:
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
91 interline[2 * end + 1] = "/"
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
92 elif start == end - 1:
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
93 interline[2 * start + 1] = "\\"
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
94 elif start == end:
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
95 interline[2 * start] = "|"
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
96 else:
15032
eb87fbc6d702 graphlog: attempt to fix index overrun (issue2912)
Matt Mackall <mpm@selenic.com>
parents: 14416
diff changeset
97 if 2 * end >= len(nodeline):
eb87fbc6d702 graphlog: attempt to fix index overrun (issue2912)
Matt Mackall <mpm@selenic.com>
parents: 14416
diff changeset
98 continue
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
99 nodeline[2 * end] = "+"
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
100 if start > end:
9198
061eeb602354 coding style: use a space after comma
Martin Geisler <mg@lazybytes.net>
parents: 9180
diff changeset
101 (start, end) = (end, start)
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
102 for i in range(2 * start + 1, 2 * end):
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
103 if nodeline[i] != "+":
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
104 nodeline[i] = "-"
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
105
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
106 def get_padding_line(ni, n_columns, edges):
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
107 line = []
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
108 line.extend(["|", " "] * ni)
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
109 if (ni, ni - 1) in edges or (ni, ni) in edges:
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
110 # (ni, ni - 1) (ni, ni)
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
111 # | | | | | | | |
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
112 # +---o | | o---+
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
113 # | | c | | c | |
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
114 # | |/ / | |/ /
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
115 # | | | | | |
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
116 c = "|"
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
117 else:
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
118 c = " "
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
119 line.extend([c, " "])
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
120 line.extend(["|", " "] * (n_columns - ni - 1))
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
121 return line
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
122
9631
1c34fca5d785 graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 9371
diff changeset
123 def asciistate():
1c34fca5d785 graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 9371
diff changeset
124 """returns the initial value for the "state" argument to ascii()"""
1c34fca5d785 graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 9371
diff changeset
125 return [0, 0]
1c34fca5d785 graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 9371
diff changeset
126
1c34fca5d785 graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 9371
diff changeset
127 def ascii(ui, state, type, char, text, coldata):
8839
bbfa21b6f18a graphlog: rename grapher to asciiedges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8838
diff changeset
128 """prints an ASCII graph of the DAG
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
129
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
130 takes the following arguments (one call per node in the graph):
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
131
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
132 - ui to write to
9631
1c34fca5d785 graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 9371
diff changeset
133 - Somewhere to keep the needed state in (init to asciistate())
7325
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
134 - Column of the current node in the set of ongoing edges.
8840
d9acbe7b0049 graphmod/graphlog: make dag walks carry data as type, payload
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8839
diff changeset
135 - Type indicator of node data == ASCIIDATA.
d9acbe7b0049 graphmod/graphlog: make dag walks carry data as type, payload
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8839
diff changeset
136 - Payload: (char, lines):
d9acbe7b0049 graphmod/graphlog: make dag walks carry data as type, payload
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8839
diff changeset
137 - Character to use as node's symbol.
d9acbe7b0049 graphmod/graphlog: make dag walks carry data as type, payload
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8839
diff changeset
138 - List of lines to display as the node's text.
7325
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
139 - Edges; a list of (col, next_col) indicating the edges between
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
140 the current node and its parents.
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
141 - Number of columns (ongoing edges) in the current revision.
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
142 - The difference between the number of columns (ongoing edges)
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
143 in the next revision and the number of columns (ongoing edges)
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
144 in the current revision. That is: -1 means one column removed;
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
145 0 means no columns added or removed; 1 means one column added.
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
146 """
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
147
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
148 idx, edges, ncols, coldiff = coldata
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
149 assert -2 < coldiff < 2
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
150 if coldiff == -1:
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
151 # Transform
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
152 #
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
153 # | | | | | |
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
154 # o | | into o---+
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
155 # |X / |/ /
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
156 # | | | |
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
157 fix_long_right_edges(edges)
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
158
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
159 # add_padding_line says whether to rewrite
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
160 #
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
161 # | | | | | | | |
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
162 # | o---+ into | o---+
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
163 # | / / | | | # <--- padding line
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
164 # o | | | / /
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
165 # o | |
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
166 add_padding_line = (len(text) > 2 and coldiff == -1 and
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
167 [x for (x, y) in edges if x + 1 < y])
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
168
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
169 # fix_nodeline_tail says whether to rewrite
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
170 #
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
171 # | | o | | | | o | |
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
172 # | | |/ / | | |/ /
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
173 # | o | | into | o / / # <--- fixed nodeline tail
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
174 # | |/ / | |/ /
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
175 # o | | o | |
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
176 fix_nodeline_tail = len(text) <= 2 and not add_padding_line
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
177
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
178 # nodeline is the line containing the node character (typically o)
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
179 nodeline = ["|", " "] * idx
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
180 nodeline.extend([char, " "])
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
181
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
182 nodeline.extend(
9631
1c34fca5d785 graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 9371
diff changeset
183 get_nodeline_edges_tail(idx, state[1], ncols, coldiff,
1c34fca5d785 graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 9371
diff changeset
184 state[0], fix_nodeline_tail))
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
185
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
186 # shift_interline is the line containing the non-vertical
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
187 # edges between this entry and the next
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
188 shift_interline = ["|", " "] * idx
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
189 if coldiff == -1:
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
190 n_spaces = 1
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
191 edge_ch = "/"
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
192 elif coldiff == 0:
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
193 n_spaces = 2
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
194 edge_ch = "|"
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
195 else:
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
196 n_spaces = 3
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
197 edge_ch = "\\"
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
198 shift_interline.extend(n_spaces * [" "])
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
199 shift_interline.extend([edge_ch, " "] * (ncols - idx - 1))
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
200
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
201 # draw edges from the current node to its parents
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
202 draw_edges(edges, nodeline, shift_interline)
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
203
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
204 # lines is the list of all graph lines to print
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
205 lines = [nodeline]
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
206 if add_padding_line:
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
207 lines.append(get_padding_line(idx, ncols, edges))
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
208 lines.append(shift_interline)
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
209
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
210 # make sure that there are as many graph lines as there are
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
211 # log strings
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
212 while len(text) < len(lines):
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
213 text.append("")
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
214 if len(lines) < len(text):
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
215 extra_interline = ["|", " "] * (ncols + coldiff)
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
216 while len(lines) < len(text):
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
217 lines.append(extra_interline)
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
218
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
219 # print lines
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
220 indentation_level = max(ncols, ncols + coldiff)
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
221 for (line, logstr) in zip(lines, text):
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
222 ln = "%-*s %s" % (2 * indentation_level, "".join(line), logstr)
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
223 ui.write(ln.rstrip() + '\n')
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
224
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
225 # ... and start over
9631
1c34fca5d785 graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 9371
diff changeset
226 state[0] = coldiff
1c34fca5d785 graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 9371
diff changeset
227 state[1] = idx
4344
345ed833854d Add graphlog extension
Joel Rosdahl <joel@rosdahl.net>
parents:
diff changeset
228
14086
2d7cb340a53f graphlog: log -G --follow file does not work, forbid it
Patrick Mezard <pmezard@gmail.com>
parents: 14085
diff changeset
229 def check_unsupported_flags(pats, opts):
16180
46a96cc830c2 graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents: 16174
diff changeset
230 for op in ["newest_first"]:
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
231 if op in opts and opts[op]:
14043
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
232 raise util.Abort(_("-G/--graph option is incompatible with --%s")
10097
ffa6f2eb934e glog: fix "incompatible option" error message.
Greg Ward <greg-hg@gerg.ca>
parents: 10084
diff changeset
233 % op.replace("_", "-"))
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
234
16412
1a10bee86e33 graphlog: cleanup before code move
Patrick Mezard <patrick@mezard.eu>
parents: 16411
diff changeset
235 def _makefilematcher(repo, pats, followfirst):
16186
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
236 # When displaying a revision with --patch --follow FILE, we have
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
237 # to know which file of the revision must be diffed. With
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
238 # --follow, we want the names of the ancestors of FILE in the
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
239 # revision, stored in "fcache". "fcache" is populated by
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
240 # reproducing the graph traversal already done by --follow revset
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
241 # and relating linkrevs to file names (which is not "correct" but
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
242 # good enough).
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
243 fcache = {}
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
244 fcacheready = [False]
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
245 pctx = repo['.']
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
246 wctx = repo[None]
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
247
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
248 def populate():
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
249 for fn in pats:
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
250 for i in ((pctx[fn],), pctx[fn].ancestors(followfirst=followfirst)):
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
251 for c in i:
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
252 fcache.setdefault(c.linkrev(), set()).add(c.path())
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
253
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
254 def filematcher(rev):
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
255 if not fcacheready[0]:
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
256 # Lazy initialization
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
257 fcacheready[0] = True
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
258 populate()
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
259 return scmutil.match(wctx, fcache.get(rev, []), default='path')
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
260
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
261 return filematcher
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
262
16405
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
263 def _makelogrevset(repo, pats, opts, revs):
16186
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
264 """Return (expr, filematcher) where expr is a revset string built
16405
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
265 from log options and file patterns or None. If --stat or --patch
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
266 are not passed filematcher is None. Otherwise it is a callable
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
267 taking a revision number and returning a match objects filtering
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
268 the files to be detailed when displaying the revision.
14043
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
269 """
14085
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
270 opt2revset = {
16174
0a73c4bd9f47 graphlog: implement --follow-first
Patrick Mezard <patrick@mezard.eu>
parents: 16173
diff changeset
271 'no_merges': ('not merge()', None),
0a73c4bd9f47 graphlog: implement --follow-first
Patrick Mezard <patrick@mezard.eu>
parents: 16173
diff changeset
272 'only_merges': ('merge()', None),
16408
d74099ac2ac1 graphlog: fix --follow --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents: 16407
diff changeset
273 '_ancestors': ('ancestors(%(val)s)', None),
16409
2cbd7dd0cc1f graphlog: fix --follow-first --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents: 16408
diff changeset
274 '_fancestors': ('_firstancestors(%(val)s)', None),
16408
d74099ac2ac1 graphlog: fix --follow --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents: 16407
diff changeset
275 '_descendants': ('descendants(%(val)s)', None),
16409
2cbd7dd0cc1f graphlog: fix --follow-first --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents: 16408
diff changeset
276 '_fdescendants': ('_firstdescendants(%(val)s)', None),
16316
0f1e621d3d3b graphlog: handle old-style --rev values
Patrick Mezard <patrick@mezard.eu>
parents: 16314
diff changeset
277 '_matchfiles': ('_matchfiles(%(val)s)', None),
16174
0a73c4bd9f47 graphlog: implement --follow-first
Patrick Mezard <patrick@mezard.eu>
parents: 16173
diff changeset
278 'date': ('date(%(val)r)', None),
0a73c4bd9f47 graphlog: implement --follow-first
Patrick Mezard <patrick@mezard.eu>
parents: 16173
diff changeset
279 'branch': ('branch(%(val)r)', ' or '),
0a73c4bd9f47 graphlog: implement --follow-first
Patrick Mezard <patrick@mezard.eu>
parents: 16173
diff changeset
280 '_patslog': ('filelog(%(val)r)', ' or '),
0a73c4bd9f47 graphlog: implement --follow-first
Patrick Mezard <patrick@mezard.eu>
parents: 16173
diff changeset
281 '_patsfollow': ('follow(%(val)r)', ' or '),
0a73c4bd9f47 graphlog: implement --follow-first
Patrick Mezard <patrick@mezard.eu>
parents: 16173
diff changeset
282 '_patsfollowfirst': ('_followfirst(%(val)r)', ' or '),
0a73c4bd9f47 graphlog: implement --follow-first
Patrick Mezard <patrick@mezard.eu>
parents: 16173
diff changeset
283 'keyword': ('keyword(%(val)r)', ' or '),
0a73c4bd9f47 graphlog: implement --follow-first
Patrick Mezard <patrick@mezard.eu>
parents: 16173
diff changeset
284 'prune': ('not (%(val)r or ancestors(%(val)r))', ' and '),
0a73c4bd9f47 graphlog: implement --follow-first
Patrick Mezard <patrick@mezard.eu>
parents: 16173
diff changeset
285 'user': ('user(%(val)r)', ' or '),
14085
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
286 }
16157
4a828d3bc04a graphlog: --branch and --only-branch are the same
Patrick Mezard <patrick@mezard.eu>
parents: 16150
diff changeset
287
16159
ec33539b61f6 graphlog: paths arguments must be or'ed
Patrick Mezard <patrick@mezard.eu>
parents: 16158
diff changeset
288 opts = dict(opts)
16405
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
289 # follow or not follow?
16174
0a73c4bd9f47 graphlog: implement --follow-first
Patrick Mezard <patrick@mezard.eu>
parents: 16173
diff changeset
290 follow = opts.get('follow') or opts.get('follow_first')
16433
e38b29937118 graphlog: reduce duplication in --follow code
Patrick Mezard <patrick@mezard.eu>
parents: 16432
diff changeset
291 followfirst = opts.get('follow_first') and 1 or 0
16408
d74099ac2ac1 graphlog: fix --follow --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents: 16407
diff changeset
292 # --follow with FILE behaviour depends on revs...
d74099ac2ac1 graphlog: fix --follow --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents: 16407
diff changeset
293 startrev = revs[0]
16433
e38b29937118 graphlog: reduce duplication in --follow code
Patrick Mezard <patrick@mezard.eu>
parents: 16432
diff changeset
294 followdescendants = (len(revs) > 1 and revs[0] < revs[1]) and 1 or 0
16405
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
295
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
296 # branch and only_branch are really aliases and must be handled at
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
297 # the same time
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
298 opts['branch'] = opts.get('branch', []) + opts.get('only_branch', [])
16407
49ef1c382965 graphlog: support changeset identifiers in --branch
Patrick Mezard <patrick@mezard.eu>
parents: 16406
diff changeset
299 opts['branch'] = [repo.lookupbranch(b) for b in opts['branch']]
16171
336e61875335 graphlog: restore FILE glob expansion on Windows
Patrick Mezard <patrick@mezard.eu>
parents: 16161
diff changeset
300 # pats/include/exclude are passed to match.match() directly in
336e61875335 graphlog: restore FILE glob expansion on Windows
Patrick Mezard <patrick@mezard.eu>
parents: 16161
diff changeset
301 # _matchfile() revset but walkchangerevs() builds its matcher with
336e61875335 graphlog: restore FILE glob expansion on Windows
Patrick Mezard <patrick@mezard.eu>
parents: 16161
diff changeset
302 # scmutil.match(). The difference is input pats are globbed on
336e61875335 graphlog: restore FILE glob expansion on Windows
Patrick Mezard <patrick@mezard.eu>
parents: 16161
diff changeset
303 # platforms without shell expansion (windows).
16173
9178d284b880 graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents: 16171
diff changeset
304 pctx = repo[None]
9178d284b880 graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents: 16171
diff changeset
305 match, pats = scmutil.matchandpats(pctx, pats, opts)
16160
1bfc7ba8b404 graphlog: imitate log slowpath when inputs are explicit files
Patrick Mezard <patrick@mezard.eu>
parents: 16159
diff changeset
306 slowpath = match.anypats() or (match.files() and opts.get('removed'))
1bfc7ba8b404 graphlog: imitate log slowpath when inputs are explicit files
Patrick Mezard <patrick@mezard.eu>
parents: 16159
diff changeset
307 if not slowpath:
1bfc7ba8b404 graphlog: imitate log slowpath when inputs are explicit files
Patrick Mezard <patrick@mezard.eu>
parents: 16159
diff changeset
308 for f in match.files():
16173
9178d284b880 graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents: 16171
diff changeset
309 if follow and f not in pctx:
9178d284b880 graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents: 16171
diff changeset
310 raise util.Abort(_('cannot follow file not in parent '
9178d284b880 graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents: 16171
diff changeset
311 'revision: "%s"') % f)
16160
1bfc7ba8b404 graphlog: imitate log slowpath when inputs are explicit files
Patrick Mezard <patrick@mezard.eu>
parents: 16159
diff changeset
312 filelog = repo.file(f)
1bfc7ba8b404 graphlog: imitate log slowpath when inputs are explicit files
Patrick Mezard <patrick@mezard.eu>
parents: 16159
diff changeset
313 if not len(filelog):
1bfc7ba8b404 graphlog: imitate log slowpath when inputs are explicit files
Patrick Mezard <patrick@mezard.eu>
parents: 16159
diff changeset
314 # A zero count may be a directory or deleted file, so
1bfc7ba8b404 graphlog: imitate log slowpath when inputs are explicit files
Patrick Mezard <patrick@mezard.eu>
parents: 16159
diff changeset
315 # try to find matching entries on the slow path.
16173
9178d284b880 graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents: 16171
diff changeset
316 if follow:
9178d284b880 graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents: 16171
diff changeset
317 raise util.Abort(
9178d284b880 graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents: 16171
diff changeset
318 _('cannot follow nonexistent file: "%s"') % f)
16160
1bfc7ba8b404 graphlog: imitate log slowpath when inputs are explicit files
Patrick Mezard <patrick@mezard.eu>
parents: 16159
diff changeset
319 slowpath = True
1bfc7ba8b404 graphlog: imitate log slowpath when inputs are explicit files
Patrick Mezard <patrick@mezard.eu>
parents: 16159
diff changeset
320 if slowpath:
16161
5a627b49b4d9 graphlog: paths/-I/-X handling requires a new revset
Patrick Mezard <patrick@mezard.eu>
parents: 16160
diff changeset
321 # See cmdutil.walkchangerevs() slow path.
5a627b49b4d9 graphlog: paths/-I/-X handling requires a new revset
Patrick Mezard <patrick@mezard.eu>
parents: 16160
diff changeset
322 #
16173
9178d284b880 graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents: 16171
diff changeset
323 if follow:
9178d284b880 graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents: 16171
diff changeset
324 raise util.Abort(_('can only follow copies/renames for explicit '
9178d284b880 graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents: 16171
diff changeset
325 'filenames'))
16161
5a627b49b4d9 graphlog: paths/-I/-X handling requires a new revset
Patrick Mezard <patrick@mezard.eu>
parents: 16160
diff changeset
326 # pats/include/exclude cannot be represented as separate
5a627b49b4d9 graphlog: paths/-I/-X handling requires a new revset
Patrick Mezard <patrick@mezard.eu>
parents: 16160
diff changeset
327 # revset expressions as their filtering logic applies at file
5a627b49b4d9 graphlog: paths/-I/-X handling requires a new revset
Patrick Mezard <patrick@mezard.eu>
parents: 16160
diff changeset
328 # level. For instance "-I a -X a" matches a revision touching
16181
1fd352aa08fc graphlog: evaluate FILE/-I/-X filesets on the working dir
Patrick Mezard <patrick@mezard.eu>
parents: 16180
diff changeset
329 # "a" and "b" while "file(a) and not file(b)" does
1fd352aa08fc graphlog: evaluate FILE/-I/-X filesets on the working dir
Patrick Mezard <patrick@mezard.eu>
parents: 16180
diff changeset
330 # not. Besides, filesets are evaluated against the working
1fd352aa08fc graphlog: evaluate FILE/-I/-X filesets on the working dir
Patrick Mezard <patrick@mezard.eu>
parents: 16180
diff changeset
331 # directory.
16411
4c2edcd84175 graphlog: correctly handle calls in subdirectories
Patrick Mezard <patrick@mezard.eu>
parents: 16409
diff changeset
332 matchargs = ['r:', 'd:relpath']
16161
5a627b49b4d9 graphlog: paths/-I/-X handling requires a new revset
Patrick Mezard <patrick@mezard.eu>
parents: 16160
diff changeset
333 for p in pats:
5a627b49b4d9 graphlog: paths/-I/-X handling requires a new revset
Patrick Mezard <patrick@mezard.eu>
parents: 16160
diff changeset
334 matchargs.append('p:' + p)
5a627b49b4d9 graphlog: paths/-I/-X handling requires a new revset
Patrick Mezard <patrick@mezard.eu>
parents: 16160
diff changeset
335 for p in opts.get('include', []):
5a627b49b4d9 graphlog: paths/-I/-X handling requires a new revset
Patrick Mezard <patrick@mezard.eu>
parents: 16160
diff changeset
336 matchargs.append('i:' + p)
5a627b49b4d9 graphlog: paths/-I/-X handling requires a new revset
Patrick Mezard <patrick@mezard.eu>
parents: 16160
diff changeset
337 for p in opts.get('exclude', []):
5a627b49b4d9 graphlog: paths/-I/-X handling requires a new revset
Patrick Mezard <patrick@mezard.eu>
parents: 16160
diff changeset
338 matchargs.append('x:' + p)
5a627b49b4d9 graphlog: paths/-I/-X handling requires a new revset
Patrick Mezard <patrick@mezard.eu>
parents: 16160
diff changeset
339 matchargs = ','.join(('%r' % p) for p in matchargs)
16316
0f1e621d3d3b graphlog: handle old-style --rev values
Patrick Mezard <patrick@mezard.eu>
parents: 16314
diff changeset
340 opts['_matchfiles'] = matchargs
16160
1bfc7ba8b404 graphlog: imitate log slowpath when inputs are explicit files
Patrick Mezard <patrick@mezard.eu>
parents: 16159
diff changeset
341 else:
16173
9178d284b880 graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents: 16171
diff changeset
342 if follow:
16433
e38b29937118 graphlog: reduce duplication in --follow code
Patrick Mezard <patrick@mezard.eu>
parents: 16432
diff changeset
343 fpats = ('_patsfollow', '_patsfollowfirst')
e38b29937118 graphlog: reduce duplication in --follow code
Patrick Mezard <patrick@mezard.eu>
parents: 16432
diff changeset
344 fnopats = (('_ancestors', '_fancestors'),
e38b29937118 graphlog: reduce duplication in --follow code
Patrick Mezard <patrick@mezard.eu>
parents: 16432
diff changeset
345 ('_descendants', '_fdescendants'))
e38b29937118 graphlog: reduce duplication in --follow code
Patrick Mezard <patrick@mezard.eu>
parents: 16432
diff changeset
346 if pats:
16434
8b62a77d0895 graphlog: fix --follow FILE and relative paths
Patrick Mezard <patrick@mezard.eu>
parents: 16433
diff changeset
347 # follow() revset inteprets its file argument as a
8b62a77d0895 graphlog: fix --follow FILE and relative paths
Patrick Mezard <patrick@mezard.eu>
parents: 16433
diff changeset
348 # manifest entry, so use match.files(), not pats.
8b62a77d0895 graphlog: fix --follow FILE and relative paths
Patrick Mezard <patrick@mezard.eu>
parents: 16433
diff changeset
349 opts[fpats[followfirst]] = list(match.files())
16173
9178d284b880 graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents: 16171
diff changeset
350 else:
16433
e38b29937118 graphlog: reduce duplication in --follow code
Patrick Mezard <patrick@mezard.eu>
parents: 16432
diff changeset
351 opts[fnopats[followdescendants][followfirst]] = str(startrev)
16173
9178d284b880 graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents: 16171
diff changeset
352 else:
9178d284b880 graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents: 16171
diff changeset
353 opts['_patslog'] = list(pats)
16157
4a828d3bc04a graphlog: --branch and --only-branch are the same
Patrick Mezard <patrick@mezard.eu>
parents: 16150
diff changeset
354
16186
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
355 filematcher = None
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
356 if opts.get('patch') or opts.get('stat'):
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
357 if follow:
16412
1a10bee86e33 graphlog: cleanup before code move
Patrick Mezard <patrick@mezard.eu>
parents: 16411
diff changeset
358 filematcher = _makefilematcher(repo, pats, followfirst)
16186
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
359 else:
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
360 filematcher = lambda rev: match
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
361
16412
1a10bee86e33 graphlog: cleanup before code move
Patrick Mezard <patrick@mezard.eu>
parents: 16411
diff changeset
362 expr = []
14043
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
363 for op, val in opts.iteritems():
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
364 if not val:
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
365 continue
14085
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
366 if op not in opt2revset:
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
367 continue
16147
5607d829bf17 graphlog: explicitely join multivalue parameters
Patrick Mezard <patrick@mezard.eu>
parents: 15032
diff changeset
368 revop, andor = opt2revset[op]
16158
e04cc21b01b2 graphlog: rewrite --rev like all other options
Patrick Mezard <patrick@mezard.eu>
parents: 16157
diff changeset
369 if '%(val)' not in revop:
16412
1a10bee86e33 graphlog: cleanup before code move
Patrick Mezard <patrick@mezard.eu>
parents: 16411
diff changeset
370 expr.append(revop)
14085
4852753dae36 graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents: 14084
diff changeset
371 else:
16147
5607d829bf17 graphlog: explicitely join multivalue parameters
Patrick Mezard <patrick@mezard.eu>
parents: 15032
diff changeset
372 if not isinstance(val, list):
16412
1a10bee86e33 graphlog: cleanup before code move
Patrick Mezard <patrick@mezard.eu>
parents: 16411
diff changeset
373 e = revop % {'val': val}
16147
5607d829bf17 graphlog: explicitely join multivalue parameters
Patrick Mezard <patrick@mezard.eu>
parents: 15032
diff changeset
374 else:
16412
1a10bee86e33 graphlog: cleanup before code move
Patrick Mezard <patrick@mezard.eu>
parents: 16411
diff changeset
375 e = '(' + andor.join((revop % {'val': v}) for v in val) + ')'
1a10bee86e33 graphlog: cleanup before code move
Patrick Mezard <patrick@mezard.eu>
parents: 16411
diff changeset
376 expr.append(e)
14043
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
377
16412
1a10bee86e33 graphlog: cleanup before code move
Patrick Mezard <patrick@mezard.eu>
parents: 16411
diff changeset
378 if expr:
1a10bee86e33 graphlog: cleanup before code move
Patrick Mezard <patrick@mezard.eu>
parents: 16411
diff changeset
379 expr = '(' + ' and '.join(expr) + ')'
14132
7d3bd0640262 graphlog: take the union of --rev specs instead of the intersection
Patrick Mezard <pmezard@gmail.com>
parents: 14130
diff changeset
380 else:
16412
1a10bee86e33 graphlog: cleanup before code move
Patrick Mezard <patrick@mezard.eu>
parents: 16411
diff changeset
381 expr = None
1a10bee86e33 graphlog: cleanup before code move
Patrick Mezard <patrick@mezard.eu>
parents: 16411
diff changeset
382 return expr, filematcher
14043
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
383
16405
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
384 def getlogrevs(repo, pats, opts):
16777
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
385 """Return (revs, expr, filematcher) where revs is an iterable of
16405
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
386 revision numbers, expr is a revset string built from log options
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
387 and file patterns or None, and used to filter 'revs'. If --stat or
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
388 --patch are not passed filematcher is None. Otherwise it is a
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
389 callable taking a revision number and returning a match objects
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
390 filtering the files to be detailed when displaying the revision.
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
391 """
16777
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
392 def increasingrevs(repo, revs, matcher):
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
393 # The sorted input rev sequence is chopped in sub-sequences
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
394 # which are sorted in ascending order and passed to the
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
395 # matcher. The filtered revs are sorted again as they were in
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
396 # the original sub-sequence. This achieve several things:
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
397 #
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
398 # - getlogrevs() now returns a generator which behaviour is
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
399 # adapted to log need. First results come fast, last ones
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
400 # are batched for performances.
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
401 #
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
402 # - revset matchers often operate faster on revision in
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
403 # changelog order, because most filters deal with the
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
404 # changelog.
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
405 #
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
406 # - revset matchers can reorder revisions. "A or B" typically
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
407 # returns returns the revision matching A then the revision
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
408 # matching B. We want to hide this internal implementation
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
409 # detail from the caller, and sorting the filtered revision
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
410 # again achieves this.
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
411 for i, window in cmdutil.increasingwindows(0, len(revs), windowsize=1):
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
412 orevs = revs[i:i + window]
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
413 nrevs = set(matcher(repo, sorted(orevs)))
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
414 for rev in orevs:
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
415 if rev in nrevs:
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
416 yield rev
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
417
16405
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
418 if not len(repo):
16777
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
419 return iter([]), None, None
16408
d74099ac2ac1 graphlog: fix --follow --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents: 16407
diff changeset
420 # Default --rev value depends on --follow but --follow behaviour
d74099ac2ac1 graphlog: fix --follow --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents: 16407
diff changeset
421 # depends on revisions resolved from --rev...
d74099ac2ac1 graphlog: fix --follow --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents: 16407
diff changeset
422 follow = opts.get('follow') or opts.get('follow_first')
16405
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
423 if opts.get('rev'):
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
424 revs = scmutil.revrange(repo, opts['rev'])
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
425 else:
16408
d74099ac2ac1 graphlog: fix --follow --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents: 16407
diff changeset
426 if follow and len(repo) > 0:
d74099ac2ac1 graphlog: fix --follow --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents: 16407
diff changeset
427 revs = scmutil.revrange(repo, ['.:0'])
d74099ac2ac1 graphlog: fix --follow --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents: 16407
diff changeset
428 else:
d74099ac2ac1 graphlog: fix --follow --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents: 16407
diff changeset
429 revs = range(len(repo) - 1, -1, -1)
16405
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
430 if not revs:
16777
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
431 return iter([]), None, None
16405
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
432 expr, filematcher = _makelogrevset(repo, pats, opts, revs)
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
433 if expr:
16777
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
434 matcher = revset.match(repo.ui, expr)
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
435 revs = increasingrevs(repo, revs, matcher)
16431
c85098cdd7df graphlog: implement --hidden
Patrick Mezard <patrick@mezard.eu>
parents: 16412
diff changeset
436 if not opts.get('hidden'):
c85098cdd7df graphlog: implement --hidden
Patrick Mezard <patrick@mezard.eu>
parents: 16412
diff changeset
437 # --hidden is still experimental and not worth a dedicated revset
c85098cdd7df graphlog: implement --hidden
Patrick Mezard <patrick@mezard.eu>
parents: 16412
diff changeset
438 # yet. Fortunately, filtering revision number is fast.
16777
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
439 revs = (r for r in revs if r not in repo.changelog.hiddenrevs)
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
440 else:
058e14da7044 graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents: 16743
diff changeset
441 revs = iter(revs)
16405
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
442 return revs, expr, filematcher
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
443
16186
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
444 def generate(ui, dag, displayer, showparents, edgefn, getrenamed=None,
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
445 filematcher=None):
9631
1c34fca5d785 graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 9371
diff changeset
446 seen, state = [], asciistate()
9369
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
447 for rev, type, ctx, parents in dag:
17119
2e13c1bd34dc graphlog: display obsolete changeset as "x"
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16777
diff changeset
448 char = 'o'
2e13c1bd34dc graphlog: display obsolete changeset as "x"
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16777
diff changeset
449 if ctx.node() in showparents:
2e13c1bd34dc graphlog: display obsolete changeset as "x"
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16777
diff changeset
450 char = '@'
2e13c1bd34dc graphlog: display obsolete changeset as "x"
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16777
diff changeset
451 elif ctx.obsolete():
2e13c1bd34dc graphlog: display obsolete changeset as "x"
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 16777
diff changeset
452 char = 'x'
16180
46a96cc830c2 graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents: 16174
diff changeset
453 copies = None
46a96cc830c2 graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents: 16174
diff changeset
454 if getrenamed and ctx.rev():
46a96cc830c2 graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents: 16174
diff changeset
455 copies = []
46a96cc830c2 graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents: 16174
diff changeset
456 for fn in ctx.files():
46a96cc830c2 graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents: 16174
diff changeset
457 rename = getrenamed(fn, ctx.rev())
46a96cc830c2 graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents: 16174
diff changeset
458 if rename:
46a96cc830c2 graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents: 16174
diff changeset
459 copies.append((fn, rename[0]))
16186
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
460 revmatchfn = None
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
461 if filematcher is not None:
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
462 revmatchfn = filematcher(ctx.rev())
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
463 displayer.show(ctx, copies=copies, matchfn=revmatchfn)
17120
01d847e0fdc9 graphlog: don't truncate template value at last \n
Mads Kiilerich <mads@kiilerich.com>
parents: 17119
diff changeset
464 lines = displayer.hunk.pop(rev).split('\n')
01d847e0fdc9 graphlog: don't truncate template value at last \n
Mads Kiilerich <mads@kiilerich.com>
parents: 17119
diff changeset
465 if not lines[-1]:
01d847e0fdc9 graphlog: don't truncate template value at last \n
Mads Kiilerich <mads@kiilerich.com>
parents: 17119
diff changeset
466 del lines[-1]
12579
aa1faedeac5a graphlog: style with header and footer (issue2395)
Mads Kiilerich <mads@kiilerich.com>
parents: 11776
diff changeset
467 displayer.flush(rev)
14130
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
468 edges = edgefn(type, char, lines, seen, rev, parents)
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
469 for type, char, lines, coldata in edges:
5e4ec4119485 graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents: 14086
diff changeset
470 ascii(ui, state, type, char, lines, coldata)
12579
aa1faedeac5a graphlog: style with header and footer (issue2395)
Mads Kiilerich <mads@kiilerich.com>
parents: 11776
diff changeset
471 displayer.close()
9369
20140c249e63 graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9368
diff changeset
472
14311
9bbac962f4dd graphlog: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents: 14139
diff changeset
473 @command('glog',
16432
365bb0fa73a4 graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents: 16431
diff changeset
474 [('f', 'follow', None,
365bb0fa73a4 graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents: 16431
diff changeset
475 _('follow changeset history, or file history across copies and renames')),
365bb0fa73a4 graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents: 16431
diff changeset
476 ('', 'follow-first', None,
365bb0fa73a4 graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents: 16431
diff changeset
477 _('only follow the first parent of merge changesets (DEPRECATED)')),
365bb0fa73a4 graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents: 16431
diff changeset
478 ('d', 'date', '', _('show revisions matching date spec'), _('DATE')),
365bb0fa73a4 graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents: 16431
diff changeset
479 ('C', 'copies', None, _('show copied files')),
365bb0fa73a4 graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents: 16431
diff changeset
480 ('k', 'keyword', [],
365bb0fa73a4 graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents: 16431
diff changeset
481 _('do case-insensitive search for a given text'), _('TEXT')),
14311
9bbac962f4dd graphlog: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents: 14139
diff changeset
482 ('r', 'rev', [], _('show the specified revision or range'), _('REV')),
16432
365bb0fa73a4 graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents: 16431
diff changeset
483 ('', 'removed', None, _('include revisions where files were removed')),
365bb0fa73a4 graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents: 16431
diff changeset
484 ('m', 'only-merges', None, _('show only merges (DEPRECATED)')),
365bb0fa73a4 graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents: 16431
diff changeset
485 ('u', 'user', [], _('revisions committed by user'), _('USER')),
365bb0fa73a4 graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents: 16431
diff changeset
486 ('', 'only-branch', [],
365bb0fa73a4 graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents: 16431
diff changeset
487 _('show only changesets within the given named branch (DEPRECATED)'),
365bb0fa73a4 graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents: 16431
diff changeset
488 _('BRANCH')),
365bb0fa73a4 graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents: 16431
diff changeset
489 ('b', 'branch', [],
365bb0fa73a4 graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents: 16431
diff changeset
490 _('show changesets within the given named branch'), _('BRANCH')),
365bb0fa73a4 graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents: 16431
diff changeset
491 ('P', 'prune', [],
365bb0fa73a4 graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents: 16431
diff changeset
492 _('do not display revision or any of its ancestors'), _('REV')),
365bb0fa73a4 graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents: 16431
diff changeset
493 ('', 'hidden', False, _('show hidden changesets (DEPRECATED)')),
365bb0fa73a4 graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents: 16431
diff changeset
494 ] + commands.logopts + commands.walkopts,
365bb0fa73a4 graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents: 16431
diff changeset
495 _('[OPTION]... [FILE]'))
14043
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
496 def graphlog(ui, repo, *pats, **opts):
7325
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
497 """show revision history alongside an ASCII revision graph
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
498
9259
19a4b8fd5c48 graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9198
diff changeset
499 Print a revision history alongside a revision graph drawn with
19a4b8fd5c48 graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9198
diff changeset
500 ASCII characters.
7325
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
501
9259
19a4b8fd5c48 graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9198
diff changeset
502 Nodes printed as an @ character are parents of the working
19a4b8fd5c48 graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9198
diff changeset
503 directory.
7325
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
504 """
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
505
16405
17deb6bbfbab graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents: 16316
diff changeset
506 revs, expr, filematcher = getlogrevs(repo, pats, opts)
16316
0f1e621d3d3b graphlog: handle old-style --rev values
Patrick Mezard <patrick@mezard.eu>
parents: 16314
diff changeset
507 revs = sorted(revs, reverse=1)
14133
28085b82f801 graphlog: always sort revisions topologically
Patrick Mezard <pmezard@gmail.com>
parents: 14132
diff changeset
508 limit = cmdutil.loglimit(opts)
28085b82f801 graphlog: always sort revisions topologically
Patrick Mezard <pmezard@gmail.com>
parents: 14132
diff changeset
509 if limit is not None:
28085b82f801 graphlog: always sort revisions topologically
Patrick Mezard <pmezard@gmail.com>
parents: 14132
diff changeset
510 revs = revs[:limit]
14043
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
511 revdag = graphmod.dagwalker(repo, revs)
7325
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
512
16180
46a96cc830c2 graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents: 16174
diff changeset
513 getrenamed = None
46a96cc830c2 graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents: 16174
diff changeset
514 if opts.get('copies'):
46a96cc830c2 graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents: 16174
diff changeset
515 endrev = None
46a96cc830c2 graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents: 16174
diff changeset
516 if opts.get('rev'):
46a96cc830c2 graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents: 16174
diff changeset
517 endrev = max(scmutil.revrange(repo, opts.get('rev'))) + 1
46a96cc830c2 graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents: 16174
diff changeset
518 getrenamed = templatekw.getrenamedfn(repo, endrev=endrev)
9368
8a4773bcbaec graphlog: extract some setup code out of common functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9259
diff changeset
519 displayer = show_changeset(ui, repo, opts, buffered=True)
8a4773bcbaec graphlog: extract some setup code out of common functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9259
diff changeset
520 showparents = [ctx.node() for ctx in repo[None].parents()]
16186
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
521 generate(ui, revdag, displayer, showparents, asciiedges, getrenamed,
af3e67354beb graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents: 16184
diff changeset
522 filematcher)
7716
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
523
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
524 def graphrevs(repo, nodes, opts):
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
525 limit = cmdutil.loglimit(opts)
8837
d8e3a98018cb graphmod/graphlog: extract nodelistwalk
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8836
diff changeset
526 nodes.reverse()
10111
27457d31ae3f cmdutil: replace sys.maxint with None as default value in loglimit
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10097
diff changeset
527 if limit is not None:
8837
d8e3a98018cb graphmod/graphlog: extract nodelistwalk
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8836
diff changeset
528 nodes = nodes[:limit]
d8e3a98018cb graphmod/graphlog: extract nodelistwalk
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8836
diff changeset
529 return graphmod.nodes(repo, nodes)
7716
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
530
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
531 def goutgoing(ui, repo, dest=None, **opts):
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
532 """show the outgoing changesets alongside an ASCII revision graph
7325
f9985108d4e4 graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7324
diff changeset
533
7716
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
534 Print the outgoing changesets alongside a revision graph drawn with
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
535 ASCII characters.
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
536
7716
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
537 Nodes printed as an @ character are parents of the working
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
538 directory.
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
539 """
7716
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
540
14086
2d7cb340a53f graphlog: log -G --follow file does not work, forbid it
Patrick Mezard <pmezard@gmail.com>
parents: 14085
diff changeset
541 check_unsupported_flags([], opts)
12735
8888e56ac417 outgoing: unify common graphlog.outgoing and hg.outgoing code
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12730
diff changeset
542 o = hg._outgoing(ui, repo, dest, opts)
8888e56ac417 outgoing: unify common graphlog.outgoing and hg.outgoing code
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12730
diff changeset
543 if o is None:
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
544 return
7716
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
545
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
546 revdag = graphrevs(repo, o, opts)
9368
8a4773bcbaec graphlog: extract some setup code out of common functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9259
diff changeset
547 displayer = show_changeset(ui, repo, opts, buffered=True)
8a4773bcbaec graphlog: extract some setup code out of common functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9259
diff changeset
548 showparents = [ctx.node() for ctx in repo[None].parents()]
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
549 generate(ui, revdag, displayer, showparents, asciiedges)
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
550
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
551 def gincoming(ui, repo, source="default", **opts):
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
552 """show the incoming changesets alongside an ASCII revision graph
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
553
9259
19a4b8fd5c48 graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9198
diff changeset
554 Print the incoming changesets alongside a revision graph drawn with
19a4b8fd5c48 graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9198
diff changeset
555 ASCII characters.
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
556
9259
19a4b8fd5c48 graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9198
diff changeset
557 Nodes printed as an @ character are parents of the working
19a4b8fd5c48 graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9198
diff changeset
558 directory.
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
559 """
12730
33e1fd2aeb3c incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12579
diff changeset
560 def subreporecurse():
33e1fd2aeb3c incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12579
diff changeset
561 return 1
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
562
14086
2d7cb340a53f graphlog: log -G --follow file does not work, forbid it
Patrick Mezard <pmezard@gmail.com>
parents: 14085
diff changeset
563 check_unsupported_flags([], opts)
12730
33e1fd2aeb3c incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12579
diff changeset
564 def display(other, chlist, displayer):
7716
4ad12930a459 graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7715
diff changeset
565 revdag = graphrevs(other, chlist, opts)
9368
8a4773bcbaec graphlog: extract some setup code out of common functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9259
diff changeset
566 showparents = [ctx.node() for ctx in repo[None].parents()]
9371
571a7acb4544 graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 9370
diff changeset
567 generate(ui, revdag, displayer, showparents, asciiedges)
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
568
12730
33e1fd2aeb3c incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12579
diff changeset
569 hg._incoming(display, subreporecurse, ui, repo, source, opts, buffered=True)
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
570
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
571 def uisetup(ui):
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
572 '''Initialize the extension.'''
14416
253bda94372e graphlog: remove unused arg from _wrapcmd
Idan Kamara <idankk86@gmail.com>
parents: 14319
diff changeset
573 _wrapcmd('log', commands.table, graphlog)
253bda94372e graphlog: remove unused arg from _wrapcmd
Idan Kamara <idankk86@gmail.com>
parents: 14319
diff changeset
574 _wrapcmd('incoming', commands.table, gincoming)
253bda94372e graphlog: remove unused arg from _wrapcmd
Idan Kamara <idankk86@gmail.com>
parents: 14319
diff changeset
575 _wrapcmd('outgoing', commands.table, goutgoing)
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
576
14416
253bda94372e graphlog: remove unused arg from _wrapcmd
Idan Kamara <idankk86@gmail.com>
parents: 14319
diff changeset
577 def _wrapcmd(cmd, table, wrapfn):
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
578 '''wrap the command'''
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
579 def graph(orig, *args, **kwargs):
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
580 if kwargs['graph']:
14043
1c1e1232abdc graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents: 14042
diff changeset
581 return wrapfn(*args, **kwargs)
7426
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
582 return orig(*args, **kwargs)
df0962f6c54e Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents: 7383
diff changeset
583 entry = extensions.wrapcommand(table, cmd, graph)
7763
cdc913e7fc5f log-like commands now use -G for --graph, -g for --git
Jim Correia <jim.correia@pobox.com>
parents: 7716
diff changeset
584 entry[1].append(('G', 'graph', None, _("show the revision DAG")))