Mercurial > public > mercurial-scm > hg
annotate hgext/graphlog.py @ 17120:01d847e0fdc9
graphlog: don't truncate template value at last \n
Most uses of templates requires a trailing newline to get vertical output.
Graphlog with a template without trailing newline did however not just create
horisontal output like other commands would but truncated the output at the
last \n. Template values without any \n were ignored completely.
Graphlog will now only eat one trailing newline before it lets the flow of the
graph add the necessary vertical space.
author | Mads Kiilerich <mads@kiilerich.com> |
---|---|
date | Fri, 06 Jul 2012 00:30:18 +0200 |
parents | 2e13c1bd34dc |
children | 868c256cb51b |
rev | line source |
---|---|
4344 | 1 # ASCII graph log extension for Mercurial |
2 # | |
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 | 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 | 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 | 16 from mercurial.i18n import _ |
6212 | 17 from mercurial.node import nullrev |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14311
diff
changeset
|
18 from mercurial import cmdutil, commands, extensions, scmutil |
16412
1a10bee86e33
graphlog: cleanup before code move
Patrick Mezard <patrick@mezard.eu>
parents:
16411
diff
changeset
|
19 from mercurial import hg, util, graphmod, templatekw, revset |
5938
9ed100559851
graphlog: add filelog revision grapher
Steve Borho <steve@borho.org>
parents:
4735
diff
changeset
|
20 |
14311
9bbac962f4dd
graphlog: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents:
14139
diff
changeset
|
21 cmdtable = {} |
9bbac962f4dd
graphlog: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents:
14139
diff
changeset
|
22 command = cmdutil.command(cmdtable) |
16743
38caf405d010
hgext: mark all first-party extensions as such
Augie Fackler <raf@durin42.com>
parents:
16434
diff
changeset
|
23 testedwith = 'internal' |
14311
9bbac962f4dd
graphlog: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents:
14139
diff
changeset
|
24 |
8840
d9acbe7b0049
graphmod/graphlog: make dag walks carry data as type, payload
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8839
diff
changeset
|
25 ASCIIDATA = 'ASC' |
d9acbe7b0049
graphmod/graphlog: make dag walks carry data as type, payload
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8839
diff
changeset
|
26 |
14130
5e4ec4119485
graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents:
14086
diff
changeset
|
27 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
|
28 """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
|
29 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
|
30 seen.append(rev) |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
31 nodeidx = seen.index(rev) |
5938
9ed100559851
graphlog: add filelog revision grapher
Steve Borho <steve@borho.org>
parents:
4735
diff
changeset
|
32 |
9369
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
33 knownparents = [] |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
34 newparents = [] |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
35 for parent in parents: |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
36 if parent in seen: |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
37 knownparents.append(parent) |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
38 else: |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
39 newparents.append(parent) |
5938
9ed100559851
graphlog: add filelog revision grapher
Steve Borho <steve@borho.org>
parents:
4735
diff
changeset
|
40 |
9369
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
41 ncols = len(seen) |
14130
5e4ec4119485
graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents:
14086
diff
changeset
|
42 nextseen = seen[:] |
5e4ec4119485
graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents:
14086
diff
changeset
|
43 nextseen[nodeidx:nodeidx + 1] = newparents |
5e4ec4119485
graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents:
14086
diff
changeset
|
44 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
|
45 |
5e4ec4119485
graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents:
14086
diff
changeset
|
46 while len(newparents) > 2: |
5e4ec4119485
graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents:
14086
diff
changeset
|
47 # 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
|
48 # 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
|
49 # 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
|
50 # slowly. |
5e4ec4119485
graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents:
14086
diff
changeset
|
51 edges.append((nodeidx, nodeidx)) |
5e4ec4119485
graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents:
14086
diff
changeset
|
52 edges.append((nodeidx, nodeidx + 1)) |
5e4ec4119485
graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents:
14086
diff
changeset
|
53 nmorecols = 1 |
5e4ec4119485
graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents:
14086
diff
changeset
|
54 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
|
55 char = '\\' |
5e4ec4119485
graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents:
14086
diff
changeset
|
56 lines = [] |
5e4ec4119485
graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents:
14086
diff
changeset
|
57 nodeidx += 1 |
5e4ec4119485
graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents:
14086
diff
changeset
|
58 ncols += 1 |
5e4ec4119485
graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents:
14086
diff
changeset
|
59 edges = [] |
5e4ec4119485
graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents:
14086
diff
changeset
|
60 del newparents[0] |
7370
7bc62ebe7693
graphlog: refactor common grapher code
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7369
diff
changeset
|
61 |
9369
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
62 if len(newparents) > 0: |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
63 edges.append((nodeidx, nodeidx)) |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
64 if len(newparents) > 1: |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
65 edges.append((nodeidx, nodeidx + 1)) |
14130
5e4ec4119485
graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents:
14086
diff
changeset
|
66 nmorecols = len(nextseen) - ncols |
5e4ec4119485
graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents:
14086
diff
changeset
|
67 seen[:] = nextseen |
5e4ec4119485
graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents:
14086
diff
changeset
|
68 yield (type, char, lines, (nodeidx, edges, ncols, nmorecols)) |
5938
9ed100559851
graphlog: add filelog revision grapher
Steve Borho <steve@borho.org>
parents:
4735
diff
changeset
|
69 |
4344 | 70 def fix_long_right_edges(edges): |
71 for (i, (start, end)) in enumerate(edges): | |
72 if end > start: | |
73 edges[i] = (start, end + 1) | |
74 | |
7326
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
75 def get_nodeline_edges_tail( |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
76 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
|
77 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
|
78 # 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
|
79 if n_columns_diff == -1: |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
80 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
|
81 tail = ["|", " "] * (start - node_index - 1) |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
82 tail.extend(["/", " "] * (n_columns - start)) |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
83 return tail |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
84 else: |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
85 return ["\\", " "] * (n_columns - node_index - 1) |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
86 else: |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
87 return ["|", " "] * (n_columns - node_index - 1) |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
88 |
4344 | 89 def draw_edges(edges, nodeline, interline): |
90 for (start, end) in edges: | |
91 if start == end + 1: | |
92 interline[2 * end + 1] = "/" | |
93 elif start == end - 1: | |
94 interline[2 * start + 1] = "\\" | |
95 elif start == end: | |
96 interline[2 * start] = "|" | |
97 else: | |
15032
eb87fbc6d702
graphlog: attempt to fix index overrun (issue2912)
Matt Mackall <mpm@selenic.com>
parents:
14416
diff
changeset
|
98 if 2 * end >= len(nodeline): |
eb87fbc6d702
graphlog: attempt to fix index overrun (issue2912)
Matt Mackall <mpm@selenic.com>
parents:
14416
diff
changeset
|
99 continue |
4344 | 100 nodeline[2 * end] = "+" |
101 if start > end: | |
9198
061eeb602354
coding style: use a space after comma
Martin Geisler <mg@lazybytes.net>
parents:
9180
diff
changeset
|
102 (start, end) = (end, start) |
4344 | 103 for i in range(2 * start + 1, 2 * end): |
104 if nodeline[i] != "+": | |
105 nodeline[i] = "-" | |
106 | |
107 def get_padding_line(ni, n_columns, edges): | |
108 line = [] | |
109 line.extend(["|", " "] * ni) | |
110 if (ni, ni - 1) in edges or (ni, ni) in edges: | |
111 # (ni, ni - 1) (ni, ni) | |
112 # | | | | | | | | | |
113 # +---o | | o---+ | |
114 # | | c | | c | | | |
115 # | |/ / | |/ / | |
116 # | | | | | | | |
117 c = "|" | |
118 else: | |
119 c = " " | |
120 line.extend([c, " "]) | |
121 line.extend(["|", " "] * (n_columns - ni - 1)) | |
122 return line | |
123 | |
9631
1c34fca5d785
graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
9371
diff
changeset
|
124 def asciistate(): |
1c34fca5d785
graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
9371
diff
changeset
|
125 """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
|
126 return [0, 0] |
1c34fca5d785
graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
9371
diff
changeset
|
127 |
1c34fca5d785
graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
9371
diff
changeset
|
128 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
|
129 """prints an ASCII graph of the DAG |
4344 | 130 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
131 takes the following arguments (one call per node in the graph): |
4344 | 132 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
133 - ui to write to |
9631
1c34fca5d785
graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
9371
diff
changeset
|
134 - 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
|
135 - 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
|
136 - 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
|
137 - Payload: (char, lines): |
d9acbe7b0049
graphmod/graphlog: make dag walks carry data as type, payload
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8839
diff
changeset
|
138 - 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
|
139 - 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
|
140 - 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
|
141 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
|
142 - 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
|
143 - 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
|
144 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
|
145 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
|
146 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
|
147 """ |
4344 | 148 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
149 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
|
150 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
|
151 if coldiff == -1: |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
152 # Transform |
4344 | 153 # |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
154 # | | | | | | |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
155 # o | | into o---+ |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
156 # |X / |/ / |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
157 # | | | | |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
158 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
|
159 |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
160 # 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
|
161 # |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
162 # | | | | | | | | |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
163 # | o---+ into | o---+ |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
164 # | / / | | | # <--- padding line |
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 # o | | |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
167 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
|
168 [x for (x, y) in edges if x + 1 < y]) |
4344 | 169 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
170 # 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
|
171 # |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
172 # | | o | | | | o | | |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
173 # | | |/ / | | |/ / |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
174 # | 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
|
175 # | |/ / | |/ / |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
176 # o | | o | | |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
177 fix_nodeline_tail = len(text) <= 2 and not add_padding_line |
4344 | 178 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
179 # 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
|
180 nodeline = ["|", " "] * idx |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
181 nodeline.extend([char, " "]) |
4344 | 182 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
183 nodeline.extend( |
9631
1c34fca5d785
graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
9371
diff
changeset
|
184 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
|
185 state[0], fix_nodeline_tail)) |
4344 | 186 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
187 # 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
|
188 # 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
|
189 shift_interline = ["|", " "] * idx |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
190 if coldiff == -1: |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
191 n_spaces = 1 |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
192 edge_ch = "/" |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
193 elif coldiff == 0: |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
194 n_spaces = 2 |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
195 edge_ch = "|" |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
196 else: |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
197 n_spaces = 3 |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
198 edge_ch = "\\" |
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(n_spaces * [" "]) |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
200 shift_interline.extend([edge_ch, " "] * (ncols - idx - 1)) |
4344 | 201 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
202 # 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
|
203 draw_edges(edges, nodeline, shift_interline) |
4344 | 204 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
205 # 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
|
206 lines = [nodeline] |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
207 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
|
208 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
|
209 lines.append(shift_interline) |
4344 | 210 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
211 # 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
|
212 # log strings |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
213 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
|
214 text.append("") |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
215 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
|
216 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
|
217 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
|
218 lines.append(extra_interline) |
4344 | 219 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
220 # print lines |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
221 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
|
222 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
|
223 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
|
224 ui.write(ln.rstrip() + '\n') |
4344 | 225 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
226 # ... and start over |
9631
1c34fca5d785
graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
9371
diff
changeset
|
227 state[0] = coldiff |
1c34fca5d785
graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
9371
diff
changeset
|
228 state[1] = idx |
4344 | 229 |
7326
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
230 def get_revs(repo, rev_opt): |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
231 if rev_opt: |
14319
b33f3e35efb0
scmutil: move revsingle/pair/range from cmdutil
Matt Mackall <mpm@selenic.com>
parents:
14311
diff
changeset
|
232 revs = scmutil.revrange(repo, rev_opt) |
11448
25430ff23cfa
glog: fix crash on empty revision range
Eric Eisner <ede@mit.edu>
parents:
11321
diff
changeset
|
233 if len(revs) == 0: |
25430ff23cfa
glog: fix crash on empty revision range
Eric Eisner <ede@mit.edu>
parents:
11321
diff
changeset
|
234 return (nullrev, nullrev) |
7326
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
235 return (max(revs), min(revs)) |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
236 else: |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
237 return (len(repo) - 1, 0) |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
238 |
14086
2d7cb340a53f
graphlog: log -G --follow file does not work, forbid it
Patrick Mezard <pmezard@gmail.com>
parents:
14085
diff
changeset
|
239 def check_unsupported_flags(pats, opts): |
16180
46a96cc830c2
graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents:
16174
diff
changeset
|
240 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
|
241 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
|
242 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
|
243 % op.replace("_", "-")) |
7426
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
244 |
16412
1a10bee86e33
graphlog: cleanup before code move
Patrick Mezard <patrick@mezard.eu>
parents:
16411
diff
changeset
|
245 def _makefilematcher(repo, pats, followfirst): |
16186
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
246 # 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
|
247 # 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
|
248 # --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
|
249 # 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
|
250 # 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
|
251 # 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
|
252 # good enough). |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
253 fcache = {} |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
254 fcacheready = [False] |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
255 pctx = repo['.'] |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
256 wctx = repo[None] |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
257 |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
258 def populate(): |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
259 for fn in pats: |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
260 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
|
261 for c in i: |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
262 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
|
263 |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
264 def filematcher(rev): |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
265 if not fcacheready[0]: |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
266 # Lazy initialization |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
267 fcacheready[0] = True |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
268 populate() |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
269 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
|
270 |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
271 return filematcher |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
272 |
16405
17deb6bbfbab
graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents:
16316
diff
changeset
|
273 def _makelogrevset(repo, pats, opts, revs): |
16186
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
274 """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
|
275 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
|
276 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
|
277 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
|
278 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
|
279 """ |
14085
4852753dae36
graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents:
14084
diff
changeset
|
280 opt2revset = { |
16174
0a73c4bd9f47
graphlog: implement --follow-first
Patrick Mezard <patrick@mezard.eu>
parents:
16173
diff
changeset
|
281 'no_merges': ('not merge()', None), |
0a73c4bd9f47
graphlog: implement --follow-first
Patrick Mezard <patrick@mezard.eu>
parents:
16173
diff
changeset
|
282 'only_merges': ('merge()', None), |
16408
d74099ac2ac1
graphlog: fix --follow --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents:
16407
diff
changeset
|
283 '_ancestors': ('ancestors(%(val)s)', None), |
16409
2cbd7dd0cc1f
graphlog: fix --follow-first --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents:
16408
diff
changeset
|
284 '_fancestors': ('_firstancestors(%(val)s)', None), |
16408
d74099ac2ac1
graphlog: fix --follow --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents:
16407
diff
changeset
|
285 '_descendants': ('descendants(%(val)s)', None), |
16409
2cbd7dd0cc1f
graphlog: fix --follow-first --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents:
16408
diff
changeset
|
286 '_fdescendants': ('_firstdescendants(%(val)s)', None), |
16316
0f1e621d3d3b
graphlog: handle old-style --rev values
Patrick Mezard <patrick@mezard.eu>
parents:
16314
diff
changeset
|
287 '_matchfiles': ('_matchfiles(%(val)s)', None), |
16174
0a73c4bd9f47
graphlog: implement --follow-first
Patrick Mezard <patrick@mezard.eu>
parents:
16173
diff
changeset
|
288 'date': ('date(%(val)r)', None), |
0a73c4bd9f47
graphlog: implement --follow-first
Patrick Mezard <patrick@mezard.eu>
parents:
16173
diff
changeset
|
289 'branch': ('branch(%(val)r)', ' or '), |
0a73c4bd9f47
graphlog: implement --follow-first
Patrick Mezard <patrick@mezard.eu>
parents:
16173
diff
changeset
|
290 '_patslog': ('filelog(%(val)r)', ' or '), |
0a73c4bd9f47
graphlog: implement --follow-first
Patrick Mezard <patrick@mezard.eu>
parents:
16173
diff
changeset
|
291 '_patsfollow': ('follow(%(val)r)', ' or '), |
0a73c4bd9f47
graphlog: implement --follow-first
Patrick Mezard <patrick@mezard.eu>
parents:
16173
diff
changeset
|
292 '_patsfollowfirst': ('_followfirst(%(val)r)', ' or '), |
0a73c4bd9f47
graphlog: implement --follow-first
Patrick Mezard <patrick@mezard.eu>
parents:
16173
diff
changeset
|
293 'keyword': ('keyword(%(val)r)', ' or '), |
0a73c4bd9f47
graphlog: implement --follow-first
Patrick Mezard <patrick@mezard.eu>
parents:
16173
diff
changeset
|
294 'prune': ('not (%(val)r or ancestors(%(val)r))', ' and '), |
0a73c4bd9f47
graphlog: implement --follow-first
Patrick Mezard <patrick@mezard.eu>
parents:
16173
diff
changeset
|
295 'user': ('user(%(val)r)', ' or '), |
14085
4852753dae36
graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents:
14084
diff
changeset
|
296 } |
16157
4a828d3bc04a
graphlog: --branch and --only-branch are the same
Patrick Mezard <patrick@mezard.eu>
parents:
16150
diff
changeset
|
297 |
16159
ec33539b61f6
graphlog: paths arguments must be or'ed
Patrick Mezard <patrick@mezard.eu>
parents:
16158
diff
changeset
|
298 opts = dict(opts) |
16405
17deb6bbfbab
graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents:
16316
diff
changeset
|
299 # follow or not follow? |
16174
0a73c4bd9f47
graphlog: implement --follow-first
Patrick Mezard <patrick@mezard.eu>
parents:
16173
diff
changeset
|
300 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
|
301 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
|
302 # --follow with FILE behaviour depends on revs... |
d74099ac2ac1
graphlog: fix --follow --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents:
16407
diff
changeset
|
303 startrev = revs[0] |
16433
e38b29937118
graphlog: reduce duplication in --follow code
Patrick Mezard <patrick@mezard.eu>
parents:
16432
diff
changeset
|
304 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
|
305 |
17deb6bbfbab
graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents:
16316
diff
changeset
|
306 # 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
|
307 # the same time |
17deb6bbfbab
graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents:
16316
diff
changeset
|
308 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
|
309 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
|
310 # 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
|
311 # _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
|
312 # 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
|
313 # platforms without shell expansion (windows). |
16173
9178d284b880
graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents:
16171
diff
changeset
|
314 pctx = repo[None] |
9178d284b880
graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents:
16171
diff
changeset
|
315 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
|
316 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
|
317 if not slowpath: |
1bfc7ba8b404
graphlog: imitate log slowpath when inputs are explicit files
Patrick Mezard <patrick@mezard.eu>
parents:
16159
diff
changeset
|
318 for f in match.files(): |
16173
9178d284b880
graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents:
16171
diff
changeset
|
319 if follow and f not in pctx: |
9178d284b880
graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents:
16171
diff
changeset
|
320 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
|
321 'revision: "%s"') % f) |
16160
1bfc7ba8b404
graphlog: imitate log slowpath when inputs are explicit files
Patrick Mezard <patrick@mezard.eu>
parents:
16159
diff
changeset
|
322 filelog = repo.file(f) |
1bfc7ba8b404
graphlog: imitate log slowpath when inputs are explicit files
Patrick Mezard <patrick@mezard.eu>
parents:
16159
diff
changeset
|
323 if not len(filelog): |
1bfc7ba8b404
graphlog: imitate log slowpath when inputs are explicit files
Patrick Mezard <patrick@mezard.eu>
parents:
16159
diff
changeset
|
324 # 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
|
325 # 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
|
326 if follow: |
9178d284b880
graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents:
16171
diff
changeset
|
327 raise util.Abort( |
9178d284b880
graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents:
16171
diff
changeset
|
328 _('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
|
329 slowpath = True |
1bfc7ba8b404
graphlog: imitate log slowpath when inputs are explicit files
Patrick Mezard <patrick@mezard.eu>
parents:
16159
diff
changeset
|
330 if slowpath: |
16161
5a627b49b4d9
graphlog: paths/-I/-X handling requires a new revset
Patrick Mezard <patrick@mezard.eu>
parents:
16160
diff
changeset
|
331 # See cmdutil.walkchangerevs() slow path. |
5a627b49b4d9
graphlog: paths/-I/-X handling requires a new revset
Patrick Mezard <patrick@mezard.eu>
parents:
16160
diff
changeset
|
332 # |
16173
9178d284b880
graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents:
16171
diff
changeset
|
333 if follow: |
9178d284b880
graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents:
16171
diff
changeset
|
334 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
|
335 'filenames')) |
16161
5a627b49b4d9
graphlog: paths/-I/-X handling requires a new revset
Patrick Mezard <patrick@mezard.eu>
parents:
16160
diff
changeset
|
336 # 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
|
337 # 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
|
338 # 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
|
339 # "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
|
340 # 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
|
341 # directory. |
16411
4c2edcd84175
graphlog: correctly handle calls in subdirectories
Patrick Mezard <patrick@mezard.eu>
parents:
16409
diff
changeset
|
342 matchargs = ['r:', 'd:relpath'] |
16161
5a627b49b4d9
graphlog: paths/-I/-X handling requires a new revset
Patrick Mezard <patrick@mezard.eu>
parents:
16160
diff
changeset
|
343 for p in pats: |
5a627b49b4d9
graphlog: paths/-I/-X handling requires a new revset
Patrick Mezard <patrick@mezard.eu>
parents:
16160
diff
changeset
|
344 matchargs.append('p:' + p) |
5a627b49b4d9
graphlog: paths/-I/-X handling requires a new revset
Patrick Mezard <patrick@mezard.eu>
parents:
16160
diff
changeset
|
345 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
|
346 matchargs.append('i:' + p) |
5a627b49b4d9
graphlog: paths/-I/-X handling requires a new revset
Patrick Mezard <patrick@mezard.eu>
parents:
16160
diff
changeset
|
347 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
|
348 matchargs.append('x:' + p) |
5a627b49b4d9
graphlog: paths/-I/-X handling requires a new revset
Patrick Mezard <patrick@mezard.eu>
parents:
16160
diff
changeset
|
349 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
|
350 opts['_matchfiles'] = matchargs |
16160
1bfc7ba8b404
graphlog: imitate log slowpath when inputs are explicit files
Patrick Mezard <patrick@mezard.eu>
parents:
16159
diff
changeset
|
351 else: |
16173
9178d284b880
graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents:
16171
diff
changeset
|
352 if follow: |
16433
e38b29937118
graphlog: reduce duplication in --follow code
Patrick Mezard <patrick@mezard.eu>
parents:
16432
diff
changeset
|
353 fpats = ('_patsfollow', '_patsfollowfirst') |
e38b29937118
graphlog: reduce duplication in --follow code
Patrick Mezard <patrick@mezard.eu>
parents:
16432
diff
changeset
|
354 fnopats = (('_ancestors', '_fancestors'), |
e38b29937118
graphlog: reduce duplication in --follow code
Patrick Mezard <patrick@mezard.eu>
parents:
16432
diff
changeset
|
355 ('_descendants', '_fdescendants')) |
e38b29937118
graphlog: reduce duplication in --follow code
Patrick Mezard <patrick@mezard.eu>
parents:
16432
diff
changeset
|
356 if pats: |
16434
8b62a77d0895
graphlog: fix --follow FILE and relative paths
Patrick Mezard <patrick@mezard.eu>
parents:
16433
diff
changeset
|
357 # 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
|
358 # 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
|
359 opts[fpats[followfirst]] = list(match.files()) |
16173
9178d284b880
graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents:
16171
diff
changeset
|
360 else: |
16433
e38b29937118
graphlog: reduce duplication in --follow code
Patrick Mezard <patrick@mezard.eu>
parents:
16432
diff
changeset
|
361 opts[fnopats[followdescendants][followfirst]] = str(startrev) |
16173
9178d284b880
graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents:
16171
diff
changeset
|
362 else: |
9178d284b880
graphlog: implement --follow with file arguments
Patrick Mezard <patrick@mezard.eu>
parents:
16171
diff
changeset
|
363 opts['_patslog'] = list(pats) |
16157
4a828d3bc04a
graphlog: --branch and --only-branch are the same
Patrick Mezard <patrick@mezard.eu>
parents:
16150
diff
changeset
|
364 |
16186
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
365 filematcher = None |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
366 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
|
367 if follow: |
16412
1a10bee86e33
graphlog: cleanup before code move
Patrick Mezard <patrick@mezard.eu>
parents:
16411
diff
changeset
|
368 filematcher = _makefilematcher(repo, pats, followfirst) |
16186
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
369 else: |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
370 filematcher = lambda rev: match |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
371 |
16412
1a10bee86e33
graphlog: cleanup before code move
Patrick Mezard <patrick@mezard.eu>
parents:
16411
diff
changeset
|
372 expr = [] |
14043
1c1e1232abdc
graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents:
14042
diff
changeset
|
373 for op, val in opts.iteritems(): |
1c1e1232abdc
graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents:
14042
diff
changeset
|
374 if not val: |
1c1e1232abdc
graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents:
14042
diff
changeset
|
375 continue |
14085
4852753dae36
graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents:
14084
diff
changeset
|
376 if op not in opt2revset: |
4852753dae36
graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents:
14084
diff
changeset
|
377 continue |
16147
5607d829bf17
graphlog: explicitely join multivalue parameters
Patrick Mezard <patrick@mezard.eu>
parents:
15032
diff
changeset
|
378 revop, andor = opt2revset[op] |
16158
e04cc21b01b2
graphlog: rewrite --rev like all other options
Patrick Mezard <patrick@mezard.eu>
parents:
16157
diff
changeset
|
379 if '%(val)' not in revop: |
16412
1a10bee86e33
graphlog: cleanup before code move
Patrick Mezard <patrick@mezard.eu>
parents:
16411
diff
changeset
|
380 expr.append(revop) |
14085
4852753dae36
graphlog: unify log -G revset translation
Patrick Mezard <pmezard@gmail.com>
parents:
14084
diff
changeset
|
381 else: |
16147
5607d829bf17
graphlog: explicitely join multivalue parameters
Patrick Mezard <patrick@mezard.eu>
parents:
15032
diff
changeset
|
382 if not isinstance(val, list): |
16412
1a10bee86e33
graphlog: cleanup before code move
Patrick Mezard <patrick@mezard.eu>
parents:
16411
diff
changeset
|
383 e = revop % {'val': val} |
16147
5607d829bf17
graphlog: explicitely join multivalue parameters
Patrick Mezard <patrick@mezard.eu>
parents:
15032
diff
changeset
|
384 else: |
16412
1a10bee86e33
graphlog: cleanup before code move
Patrick Mezard <patrick@mezard.eu>
parents:
16411
diff
changeset
|
385 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
|
386 expr.append(e) |
14043
1c1e1232abdc
graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents:
14042
diff
changeset
|
387 |
16412
1a10bee86e33
graphlog: cleanup before code move
Patrick Mezard <patrick@mezard.eu>
parents:
16411
diff
changeset
|
388 if expr: |
1a10bee86e33
graphlog: cleanup before code move
Patrick Mezard <patrick@mezard.eu>
parents:
16411
diff
changeset
|
389 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
|
390 else: |
16412
1a10bee86e33
graphlog: cleanup before code move
Patrick Mezard <patrick@mezard.eu>
parents:
16411
diff
changeset
|
391 expr = None |
1a10bee86e33
graphlog: cleanup before code move
Patrick Mezard <patrick@mezard.eu>
parents:
16411
diff
changeset
|
392 return expr, filematcher |
14043
1c1e1232abdc
graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents:
14042
diff
changeset
|
393 |
16405
17deb6bbfbab
graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents:
16316
diff
changeset
|
394 def getlogrevs(repo, pats, opts): |
16777
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
395 """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
|
396 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
|
397 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
|
398 --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
|
399 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
|
400 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
|
401 """ |
16777
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
402 def increasingrevs(repo, revs, matcher): |
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
403 # 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
|
404 # 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
|
405 # 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
|
406 # the original sub-sequence. This achieve several things: |
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
407 # |
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
408 # - getlogrevs() now returns a generator which behaviour is |
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
409 # 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
|
410 # are batched for performances. |
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
411 # |
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
412 # - revset matchers often operate faster on revision in |
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
413 # changelog order, because most filters deal with the |
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
414 # changelog. |
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
415 # |
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
416 # - 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
|
417 # 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
|
418 # 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
|
419 # 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
|
420 # again achieves this. |
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
421 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
|
422 orevs = revs[i:i + window] |
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
423 nrevs = set(matcher(repo, sorted(orevs))) |
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
424 for rev in orevs: |
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
425 if rev in nrevs: |
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
426 yield rev |
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
427 |
16405
17deb6bbfbab
graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents:
16316
diff
changeset
|
428 if not len(repo): |
16777
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
429 return iter([]), None, None |
16408
d74099ac2ac1
graphlog: fix --follow --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents:
16407
diff
changeset
|
430 # Default --rev value depends on --follow but --follow behaviour |
d74099ac2ac1
graphlog: fix --follow --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents:
16407
diff
changeset
|
431 # depends on revisions resolved from --rev... |
d74099ac2ac1
graphlog: fix --follow --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents:
16407
diff
changeset
|
432 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
|
433 if opts.get('rev'): |
17deb6bbfbab
graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents:
16316
diff
changeset
|
434 revs = scmutil.revrange(repo, opts['rev']) |
17deb6bbfbab
graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents:
16316
diff
changeset
|
435 else: |
16408
d74099ac2ac1
graphlog: fix --follow --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents:
16407
diff
changeset
|
436 if follow and len(repo) > 0: |
d74099ac2ac1
graphlog: fix --follow --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents:
16407
diff
changeset
|
437 revs = scmutil.revrange(repo, ['.:0']) |
d74099ac2ac1
graphlog: fix --follow --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents:
16407
diff
changeset
|
438 else: |
d74099ac2ac1
graphlog: fix --follow --rev combinations
Patrick Mezard <patrick@mezard.eu>
parents:
16407
diff
changeset
|
439 revs = range(len(repo) - 1, -1, -1) |
16405
17deb6bbfbab
graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents:
16316
diff
changeset
|
440 if not revs: |
16777
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
441 return iter([]), None, None |
16405
17deb6bbfbab
graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents:
16316
diff
changeset
|
442 expr, filematcher = _makelogrevset(repo, pats, opts, revs) |
17deb6bbfbab
graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents:
16316
diff
changeset
|
443 if expr: |
16777
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
444 matcher = revset.match(repo.ui, expr) |
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
445 revs = increasingrevs(repo, revs, matcher) |
16431
c85098cdd7df
graphlog: implement --hidden
Patrick Mezard <patrick@mezard.eu>
parents:
16412
diff
changeset
|
446 if not opts.get('hidden'): |
c85098cdd7df
graphlog: implement --hidden
Patrick Mezard <patrick@mezard.eu>
parents:
16412
diff
changeset
|
447 # --hidden is still experimental and not worth a dedicated revset |
c85098cdd7df
graphlog: implement --hidden
Patrick Mezard <patrick@mezard.eu>
parents:
16412
diff
changeset
|
448 # yet. Fortunately, filtering revision number is fast. |
16777
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
449 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
|
450 else: |
058e14da7044
graphlog: turn getlogrevs() into a generator
Patrick Mezard <patrick@mezard.eu>
parents:
16743
diff
changeset
|
451 revs = iter(revs) |
16405
17deb6bbfbab
graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents:
16316
diff
changeset
|
452 return revs, expr, filematcher |
17deb6bbfbab
graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents:
16316
diff
changeset
|
453 |
16186
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
454 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
|
455 filematcher=None): |
9631
1c34fca5d785
graphlog: hide internal state of ascii() from users
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
9371
diff
changeset
|
456 seen, state = [], asciistate() |
9369
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
457 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
|
458 char = 'o' |
2e13c1bd34dc
graphlog: display obsolete changeset as "x"
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16777
diff
changeset
|
459 if ctx.node() in showparents: |
2e13c1bd34dc
graphlog: display obsolete changeset as "x"
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16777
diff
changeset
|
460 char = '@' |
2e13c1bd34dc
graphlog: display obsolete changeset as "x"
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16777
diff
changeset
|
461 elif ctx.obsolete(): |
2e13c1bd34dc
graphlog: display obsolete changeset as "x"
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
16777
diff
changeset
|
462 char = 'x' |
16180
46a96cc830c2
graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents:
16174
diff
changeset
|
463 copies = None |
46a96cc830c2
graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents:
16174
diff
changeset
|
464 if getrenamed and ctx.rev(): |
46a96cc830c2
graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents:
16174
diff
changeset
|
465 copies = [] |
46a96cc830c2
graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents:
16174
diff
changeset
|
466 for fn in ctx.files(): |
46a96cc830c2
graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents:
16174
diff
changeset
|
467 rename = getrenamed(fn, ctx.rev()) |
46a96cc830c2
graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents:
16174
diff
changeset
|
468 if rename: |
46a96cc830c2
graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents:
16174
diff
changeset
|
469 copies.append((fn, rename[0])) |
16186
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
470 revmatchfn = None |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
471 if filematcher is not None: |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
472 revmatchfn = filematcher(ctx.rev()) |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
473 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
|
474 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
|
475 if not lines[-1]: |
01d847e0fdc9
graphlog: don't truncate template value at last \n
Mads Kiilerich <mads@kiilerich.com>
parents:
17119
diff
changeset
|
476 del lines[-1] |
12579
aa1faedeac5a
graphlog: style with header and footer (issue2395)
Mads Kiilerich <mads@kiilerich.com>
parents:
11776
diff
changeset
|
477 displayer.flush(rev) |
14130
5e4ec4119485
graphlog: display nodes with more than 2 predecessors
Patrick Mezard <pmezard@gmail.com>
parents:
14086
diff
changeset
|
478 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
|
479 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
|
480 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
|
481 displayer.close() |
9369
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
482 |
14311
9bbac962f4dd
graphlog: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents:
14139
diff
changeset
|
483 @command('glog', |
16432
365bb0fa73a4
graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents:
16431
diff
changeset
|
484 [('f', 'follow', None, |
365bb0fa73a4
graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents:
16431
diff
changeset
|
485 _('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
|
486 ('', 'follow-first', None, |
365bb0fa73a4
graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents:
16431
diff
changeset
|
487 _('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
|
488 ('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
|
489 ('C', 'copies', None, _('show copied files')), |
365bb0fa73a4
graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents:
16431
diff
changeset
|
490 ('k', 'keyword', [], |
365bb0fa73a4
graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents:
16431
diff
changeset
|
491 _('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
|
492 ('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
|
493 ('', '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
|
494 ('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
|
495 ('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
|
496 ('', 'only-branch', [], |
365bb0fa73a4
graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents:
16431
diff
changeset
|
497 _('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
|
498 _('BRANCH')), |
365bb0fa73a4
graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents:
16431
diff
changeset
|
499 ('b', 'branch', [], |
365bb0fa73a4
graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents:
16431
diff
changeset
|
500 _('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
|
501 ('P', 'prune', [], |
365bb0fa73a4
graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents:
16431
diff
changeset
|
502 _('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
|
503 ('', 'hidden', False, _('show hidden changesets (DEPRECATED)')), |
365bb0fa73a4
graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents:
16431
diff
changeset
|
504 ] + commands.logopts + commands.walkopts, |
365bb0fa73a4
graphlog: add all log options to glog command
Patrick Mezard <patrick@mezard.eu>
parents:
16431
diff
changeset
|
505 _('[OPTION]... [FILE]')) |
14043
1c1e1232abdc
graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents:
14042
diff
changeset
|
506 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
|
507 """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
|
508 |
9259
19a4b8fd5c48
graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9198
diff
changeset
|
509 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
|
510 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
|
511 |
9259
19a4b8fd5c48
graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9198
diff
changeset
|
512 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
|
513 directory. |
7325
f9985108d4e4
graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7324
diff
changeset
|
514 """ |
f9985108d4e4
graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7324
diff
changeset
|
515 |
16405
17deb6bbfbab
graphlog: refactor revset() to return revisions
Patrick Mezard <patrick@mezard.eu>
parents:
16316
diff
changeset
|
516 revs, expr, filematcher = getlogrevs(repo, pats, opts) |
16316
0f1e621d3d3b
graphlog: handle old-style --rev values
Patrick Mezard <patrick@mezard.eu>
parents:
16314
diff
changeset
|
517 revs = sorted(revs, reverse=1) |
14133
28085b82f801
graphlog: always sort revisions topologically
Patrick Mezard <pmezard@gmail.com>
parents:
14132
diff
changeset
|
518 limit = cmdutil.loglimit(opts) |
28085b82f801
graphlog: always sort revisions topologically
Patrick Mezard <pmezard@gmail.com>
parents:
14132
diff
changeset
|
519 if limit is not None: |
28085b82f801
graphlog: always sort revisions topologically
Patrick Mezard <pmezard@gmail.com>
parents:
14132
diff
changeset
|
520 revs = revs[:limit] |
14043
1c1e1232abdc
graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents:
14042
diff
changeset
|
521 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
|
522 |
16180
46a96cc830c2
graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents:
16174
diff
changeset
|
523 getrenamed = None |
46a96cc830c2
graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents:
16174
diff
changeset
|
524 if opts.get('copies'): |
46a96cc830c2
graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents:
16174
diff
changeset
|
525 endrev = None |
46a96cc830c2
graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents:
16174
diff
changeset
|
526 if opts.get('rev'): |
46a96cc830c2
graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents:
16174
diff
changeset
|
527 endrev = max(scmutil.revrange(repo, opts.get('rev'))) + 1 |
46a96cc830c2
graphlog: implement --copies
Patrick Mezard <patrick@mezard.eu>
parents:
16174
diff
changeset
|
528 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
|
529 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
|
530 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
|
531 generate(ui, revdag, displayer, showparents, asciiedges, getrenamed, |
af3e67354beb
graphlog: apply file filters --patch/--stat output
Patrick Mezard <patrick@mezard.eu>
parents:
16184
diff
changeset
|
532 filematcher) |
7716
4ad12930a459
graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7715
diff
changeset
|
533 |
4ad12930a459
graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7715
diff
changeset
|
534 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
|
535 limit = cmdutil.loglimit(opts) |
8837
d8e3a98018cb
graphmod/graphlog: extract nodelistwalk
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8836
diff
changeset
|
536 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
|
537 if limit is not None: |
8837
d8e3a98018cb
graphmod/graphlog: extract nodelistwalk
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8836
diff
changeset
|
538 nodes = nodes[:limit] |
d8e3a98018cb
graphmod/graphlog: extract nodelistwalk
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8836
diff
changeset
|
539 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
|
540 |
4ad12930a459
graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7715
diff
changeset
|
541 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
|
542 """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
|
543 |
7716
4ad12930a459
graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7715
diff
changeset
|
544 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
|
545 ASCII characters. |
7426
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
546 |
7716
4ad12930a459
graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7715
diff
changeset
|
547 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
|
548 directory. |
7426
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
549 """ |
7716
4ad12930a459
graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7715
diff
changeset
|
550 |
14086
2d7cb340a53f
graphlog: log -G --follow file does not work, forbid it
Patrick Mezard <pmezard@gmail.com>
parents:
14085
diff
changeset
|
551 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
|
552 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
|
553 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
|
554 return |
7716
4ad12930a459
graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7715
diff
changeset
|
555 |
4ad12930a459
graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7715
diff
changeset
|
556 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
|
557 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
|
558 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
|
559 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
|
560 |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
561 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
|
562 """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
|
563 |
9259
19a4b8fd5c48
graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9198
diff
changeset
|
564 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
|
565 ASCII characters. |
7426
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
566 |
9259
19a4b8fd5c48
graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9198
diff
changeset
|
567 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
|
568 directory. |
7426
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
569 """ |
12730
33e1fd2aeb3c
incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12579
diff
changeset
|
570 def subreporecurse(): |
33e1fd2aeb3c
incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12579
diff
changeset
|
571 return 1 |
7426
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
572 |
14086
2d7cb340a53f
graphlog: log -G --follow file does not work, forbid it
Patrick Mezard <pmezard@gmail.com>
parents:
14085
diff
changeset
|
573 check_unsupported_flags([], opts) |
12730
33e1fd2aeb3c
incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12579
diff
changeset
|
574 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
|
575 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
|
576 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
|
577 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
|
578 |
12730
33e1fd2aeb3c
incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12579
diff
changeset
|
579 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
|
580 |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
581 def uisetup(ui): |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
582 '''Initialize the extension.''' |
14416
253bda94372e
graphlog: remove unused arg from _wrapcmd
Idan Kamara <idankk86@gmail.com>
parents:
14319
diff
changeset
|
583 _wrapcmd('log', commands.table, graphlog) |
253bda94372e
graphlog: remove unused arg from _wrapcmd
Idan Kamara <idankk86@gmail.com>
parents:
14319
diff
changeset
|
584 _wrapcmd('incoming', commands.table, gincoming) |
253bda94372e
graphlog: remove unused arg from _wrapcmd
Idan Kamara <idankk86@gmail.com>
parents:
14319
diff
changeset
|
585 _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
|
586 |
14416
253bda94372e
graphlog: remove unused arg from _wrapcmd
Idan Kamara <idankk86@gmail.com>
parents:
14319
diff
changeset
|
587 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
|
588 '''wrap the command''' |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
589 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
|
590 if kwargs['graph']: |
14043
1c1e1232abdc
graphlog: make use of graphmod's revset support
Alexander Solovyov <alexander@solovyov.net>
parents:
14042
diff
changeset
|
591 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
|
592 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
|
593 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
|
594 entry[1].append(('G', 'graph', None, _("show the revision DAG"))) |