Mercurial > hg
annotate hgext/graphlog.py @ 9485:7d6ac5d7917c
test-gendoc: add tests for all languages
This ensures that we catch errors in the reST syntax early and for all
languages. The only change needed in gendoc.py was to correct the
computation of section underlines for Asian languages.
author | Martin Geisler <mg@lazybytes.net> |
---|---|
date | Sun, 27 Sep 2009 10:12:02 +0200 |
parents | 571a7acb4544 |
children | 1c34fca5d785 |
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 |
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8210
diff
changeset
|
6 # GNU General Public License version 2, incorporated herein by reference. |
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 |
8837
d8e3a98018cb
graphmod/graphlog: extract nodelistwalk
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8836
diff
changeset
|
15 import os, sys |
4344 | 16 from mercurial.cmdutil import revrange, show_changeset |
7873
4a4c7f6a5912
cleanup: drop unused imports
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7763
diff
changeset
|
17 from mercurial.commands import templateopts |
4344 | 18 from mercurial.i18n import _ |
6212 | 19 from mercurial.node import nullrev |
7426
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
20 from mercurial import bundlerepo, changegroup, cmdutil, commands, extensions |
8836
11ff34956ee7
graphmod/graphlog: move log walks to graphmod
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8667
diff
changeset
|
21 from mercurial import hg, url, util, graphmod |
5938
9ed100559851
graphlog: add filelog revision grapher
Steve Borho <steve@borho.org>
parents:
4735
diff
changeset
|
22 |
8840
d9acbe7b0049
graphmod/graphlog: make dag walks carry data as type, payload
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8839
diff
changeset
|
23 ASCIIDATA = 'ASC' |
d9acbe7b0049
graphmod/graphlog: make dag walks carry data as type, payload
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8839
diff
changeset
|
24 |
9369
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
25 def asciiedges(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
|
26 """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
|
27 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
|
28 seen.append(rev) |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
29 nodeidx = seen.index(rev) |
5938
9ed100559851
graphlog: add filelog revision grapher
Steve Borho <steve@borho.org>
parents:
4735
diff
changeset
|
30 |
9369
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
31 knownparents = [] |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
32 newparents = [] |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
33 for parent in parents: |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
34 if parent in seen: |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
35 knownparents.append(parent) |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
36 else: |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
37 newparents.append(parent) |
5938
9ed100559851
graphlog: add filelog revision grapher
Steve Borho <steve@borho.org>
parents:
4735
diff
changeset
|
38 |
9369
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
39 ncols = len(seen) |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
40 seen[nodeidx:nodeidx + 1] = newparents |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
41 edges = [(nodeidx, seen.index(p)) for p in knownparents] |
7370
7bc62ebe7693
graphlog: refactor common grapher code
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7369
diff
changeset
|
42 |
9369
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
43 if len(newparents) > 0: |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
44 edges.append((nodeidx, nodeidx)) |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
45 if len(newparents) > 1: |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
46 edges.append((nodeidx, nodeidx + 1)) |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
47 |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
48 nmorecols = len(seen) - ncols |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
49 return nodeidx, edges, ncols, nmorecols |
5938
9ed100559851
graphlog: add filelog revision grapher
Steve Borho <steve@borho.org>
parents:
4735
diff
changeset
|
50 |
4344 | 51 def fix_long_right_edges(edges): |
52 for (i, (start, end)) in enumerate(edges): | |
53 if end > start: | |
54 edges[i] = (start, end + 1) | |
55 | |
7326
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
56 def get_nodeline_edges_tail( |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
57 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
|
58 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
|
59 # 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
|
60 if n_columns_diff == -1: |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
61 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
|
62 tail = ["|", " "] * (start - node_index - 1) |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
63 tail.extend(["/", " "] * (n_columns - start)) |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
64 return tail |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
65 else: |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
66 return ["\\", " "] * (n_columns - node_index - 1) |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
67 else: |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
68 return ["|", " "] * (n_columns - node_index - 1) |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
69 |
4344 | 70 def draw_edges(edges, nodeline, interline): |
71 for (start, end) in edges: | |
72 if start == end + 1: | |
73 interline[2 * end + 1] = "/" | |
74 elif start == end - 1: | |
75 interline[2 * start + 1] = "\\" | |
76 elif start == end: | |
77 interline[2 * start] = "|" | |
78 else: | |
79 nodeline[2 * end] = "+" | |
80 if start > end: | |
9198
061eeb602354
coding style: use a space after comma
Martin Geisler <mg@lazybytes.net>
parents:
9180
diff
changeset
|
81 (start, end) = (end, start) |
4344 | 82 for i in range(2 * start + 1, 2 * end): |
83 if nodeline[i] != "+": | |
84 nodeline[i] = "-" | |
85 | |
86 def get_padding_line(ni, n_columns, edges): | |
87 line = [] | |
88 line.extend(["|", " "] * ni) | |
89 if (ni, ni - 1) in edges or (ni, ni) in edges: | |
90 # (ni, ni - 1) (ni, ni) | |
91 # | | | | | | | | | |
92 # +---o | | o---+ | |
93 # | | c | | c | | | |
94 # | |/ / | |/ / | |
95 # | | | | | | | |
96 c = "|" | |
97 else: | |
98 c = " " | |
99 line.extend([c, " "]) | |
100 line.extend(["|", " "] * (n_columns - ni - 1)) | |
101 return line | |
102 | |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
103 def ascii(ui, base, type, char, text, coldata): |
8839
bbfa21b6f18a
graphlog: rename grapher to asciiedges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8838
diff
changeset
|
104 """prints an ASCII graph of the DAG |
4344 | 105 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
106 takes the following arguments (one call per node in the graph): |
4344 | 107 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
108 - ui to write to |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
109 - A list we can keep the needed state in |
7325
f9985108d4e4
graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7324
diff
changeset
|
110 - 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
|
111 - 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
|
112 - Payload: (char, lines): |
d9acbe7b0049
graphmod/graphlog: make dag walks carry data as type, payload
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8839
diff
changeset
|
113 - 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
|
114 - 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
|
115 - 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
|
116 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
|
117 - 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
|
118 - 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
|
119 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
|
120 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
|
121 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
|
122 """ |
4344 | 123 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
124 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
|
125 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
|
126 if coldiff == -1: |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
127 # Transform |
4344 | 128 # |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
129 # | | | | | | |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
130 # o | | into o---+ |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
131 # |X / |/ / |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
132 # | | | | |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
133 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
|
134 |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
135 # 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
|
136 # |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
137 # | | | | | | | | |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
138 # | o---+ into | o---+ |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
139 # | / / | | | # <--- padding line |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
140 # o | | | / / |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
141 # o | | |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
142 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
|
143 [x for (x, y) in edges if x + 1 < y]) |
4344 | 144 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
145 # 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
|
146 # |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
147 # | | o | | | | o | | |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
148 # | | |/ / | | |/ / |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
149 # | 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
|
150 # | |/ / | |/ / |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
151 # o | | o | | |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
152 fix_nodeline_tail = len(text) <= 2 and not add_padding_line |
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 # 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
|
155 nodeline = ["|", " "] * idx |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
156 nodeline.extend([char, " "]) |
4344 | 157 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
158 nodeline.extend( |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
159 get_nodeline_edges_tail(idx, base[1], ncols, coldiff, |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
160 base[0], fix_nodeline_tail)) |
4344 | 161 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
162 # 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
|
163 # 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
|
164 shift_interline = ["|", " "] * idx |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
165 if coldiff == -1: |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
166 n_spaces = 1 |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
167 edge_ch = "/" |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
168 elif coldiff == 0: |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
169 n_spaces = 2 |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
170 edge_ch = "|" |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
171 else: |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
172 n_spaces = 3 |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
173 edge_ch = "\\" |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
174 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
|
175 shift_interline.extend([edge_ch, " "] * (ncols - idx - 1)) |
4344 | 176 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
177 # 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
|
178 draw_edges(edges, nodeline, shift_interline) |
4344 | 179 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
180 # 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
|
181 lines = [nodeline] |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
182 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
|
183 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
|
184 lines.append(shift_interline) |
4344 | 185 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
186 # 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
|
187 # log strings |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
188 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
|
189 text.append("") |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
190 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
|
191 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
|
192 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
|
193 lines.append(extra_interline) |
4344 | 194 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
195 # print lines |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
196 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
|
197 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
|
198 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
|
199 ui.write(ln.rstrip() + '\n') |
4344 | 200 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
201 # ... and start over |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
202 base[0] = coldiff |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
203 base[1] = idx |
4344 | 204 |
7326
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
205 def get_revs(repo, rev_opt): |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
206 if rev_opt: |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
207 revs = revrange(repo, rev_opt) |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
208 return (max(revs), min(revs)) |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
209 else: |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
210 return (len(repo) - 1, 0) |
ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7325
diff
changeset
|
211 |
7426
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
212 def check_unsupported_flags(opts): |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
213 for op in ["follow", "follow_first", "date", "copies", "keyword", "remove", |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
214 "only_merges", "user", "only_branch", "prune", "newest_first", |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
215 "no_merges", "include", "exclude"]: |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
216 if op in opts and opts[op]: |
7713
b8c4ba0fd7c4
graphlog: import util module rather than selected functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7435
diff
changeset
|
217 raise util.Abort(_("--graph option is incompatible with --%s") % op) |
7426
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
218 |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
219 def generate(ui, dag, displayer, showparents, edgefn): |
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
220 seen, base = [], [0, 0] |
9369
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
221 for rev, type, ctx, parents in dag: |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
222 char = ctx.node() in showparents and '@' or 'o' |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
223 displayer.show(ctx) |
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
224 lines = displayer.hunk.pop(rev).split('\n')[:-1] |
9371
571a7acb4544
graphlog: simplify ascii drawing to process one cset at a time
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9370
diff
changeset
|
225 ascii(ui, base, type, char, lines, edgefn(seen, rev, parents)) |
9369
20140c249e63
graphlog: move common code into function again, change function types
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9368
diff
changeset
|
226 |
7325
f9985108d4e4
graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7324
diff
changeset
|
227 def graphlog(ui, repo, path=None, **opts): |
f9985108d4e4
graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7324
diff
changeset
|
228 """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
|
229 |
9259
19a4b8fd5c48
graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9198
diff
changeset
|
230 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
|
231 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
|
232 |
9259
19a4b8fd5c48
graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9198
diff
changeset
|
233 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
|
234 directory. |
7325
f9985108d4e4
graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7324
diff
changeset
|
235 """ |
f9985108d4e4
graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7324
diff
changeset
|
236 |
7426
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
237 check_unsupported_flags(opts) |
7715
fd3266287b40
graphlog: reuse cmdutil.loglimit() instead of redefining
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7713
diff
changeset
|
238 limit = cmdutil.loglimit(opts) |
7370
7bc62ebe7693
graphlog: refactor common grapher code
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7369
diff
changeset
|
239 start, stop = get_revs(repo, opts["rev"]) |
7bc62ebe7693
graphlog: refactor common grapher code
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7369
diff
changeset
|
240 stop = max(stop, start - limit + 1) |
7bc62ebe7693
graphlog: refactor common grapher code
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7369
diff
changeset
|
241 if start == nullrev: |
7325
f9985108d4e4
graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7324
diff
changeset
|
242 return |
7370
7bc62ebe7693
graphlog: refactor common grapher code
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7369
diff
changeset
|
243 |
7325
f9985108d4e4
graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7324
diff
changeset
|
244 if path: |
7713
b8c4ba0fd7c4
graphlog: import util module rather than selected functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7435
diff
changeset
|
245 path = util.canonpath(repo.root, os.getcwd(), path) |
7370
7bc62ebe7693
graphlog: refactor common grapher code
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7369
diff
changeset
|
246 if path: # could be reset in canonpath |
8836
11ff34956ee7
graphmod/graphlog: move log walks to graphmod
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8667
diff
changeset
|
247 revdag = graphmod.filerevs(repo, path, start, stop) |
7325
f9985108d4e4
graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7324
diff
changeset
|
248 else: |
8836
11ff34956ee7
graphmod/graphlog: move log walks to graphmod
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8667
diff
changeset
|
249 revdag = graphmod.revisions(repo, start, stop) |
7325
f9985108d4e4
graphlog: split the actual DAG grapher out into a separate method
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7324
diff
changeset
|
250 |
9368
8a4773bcbaec
graphlog: extract some setup code out of common functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9259
diff
changeset
|
251 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
|
252 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
|
253 generate(ui, revdag, displayer, showparents, asciiedges) |
7716
4ad12930a459
graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7715
diff
changeset
|
254 |
4ad12930a459
graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7715
diff
changeset
|
255 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
|
256 limit = cmdutil.loglimit(opts) |
8837
d8e3a98018cb
graphmod/graphlog: extract nodelistwalk
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8836
diff
changeset
|
257 nodes.reverse() |
d8e3a98018cb
graphmod/graphlog: extract nodelistwalk
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8836
diff
changeset
|
258 if limit < sys.maxint: |
d8e3a98018cb
graphmod/graphlog: extract nodelistwalk
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8836
diff
changeset
|
259 nodes = nodes[:limit] |
d8e3a98018cb
graphmod/graphlog: extract nodelistwalk
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
8836
diff
changeset
|
260 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
|
261 |
4ad12930a459
graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7715
diff
changeset
|
262 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
|
263 """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
|
264 |
7716
4ad12930a459
graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7715
diff
changeset
|
265 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
|
266 ASCII characters. |
7426
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
267 |
7716
4ad12930a459
graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7715
diff
changeset
|
268 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
|
269 directory. |
7426
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
270 """ |
7716
4ad12930a459
graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7715
diff
changeset
|
271 |
4ad12930a459
graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7715
diff
changeset
|
272 check_unsupported_flags(opts) |
7426
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
273 dest, revs, checkout = hg.parseurl( |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
274 ui.expandpath(dest or 'default-push', dest or 'default'), |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
275 opts.get('rev')) |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
276 if revs: |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
277 revs = [repo.lookup(rev) for rev in revs] |
8188 | 278 other = hg.repository(cmdutil.remoteui(ui, opts), dest) |
7426
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
279 ui.status(_('comparing with %s\n') % url.hidepassword(dest)) |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
280 o = repo.findoutgoing(other, force=opts.get('force')) |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
281 if not o: |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
282 ui.status(_("no changes found\n")) |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
283 return |
7716
4ad12930a459
graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7715
diff
changeset
|
284 |
7426
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
285 o = repo.changelog.nodesbetween(o, revs)[0] |
7716
4ad12930a459
graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7715
diff
changeset
|
286 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
|
287 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
|
288 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
|
289 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
|
290 |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
291 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
|
292 """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
|
293 |
9259
19a4b8fd5c48
graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9198
diff
changeset
|
294 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
|
295 ASCII characters. |
7426
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
296 |
9259
19a4b8fd5c48
graphlog: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9198
diff
changeset
|
297 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
|
298 directory. |
7426
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
299 """ |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
300 |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
301 check_unsupported_flags(opts) |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
302 source, revs, checkout = hg.parseurl(ui.expandpath(source), opts.get('rev')) |
8188 | 303 other = hg.repository(cmdutil.remoteui(repo, opts), source) |
7426
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
304 ui.status(_('comparing with %s\n') % url.hidepassword(source)) |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
305 if revs: |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
306 revs = [other.lookup(rev) for rev in revs] |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
307 incoming = repo.findincoming(other, heads=revs, force=opts["force"]) |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
308 if not incoming: |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
309 try: |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
310 os.unlink(opts["bundle"]) |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
311 except: |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
312 pass |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
313 ui.status(_("no changes found\n")) |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
314 return |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
315 |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
316 cleanup = None |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
317 try: |
7716
4ad12930a459
graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7715
diff
changeset
|
318 |
7426
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
319 fname = opts["bundle"] |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
320 if fname or not other.local(): |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
321 # create a bundle (uncompressed if other repo is not local) |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
322 if revs is None: |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
323 cg = other.changegroup(incoming, "incoming") |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
324 else: |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
325 cg = other.changegroupsubset(incoming, revs, 'incoming') |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
326 bundletype = other.local() and "HG10BZ" or "HG10UN" |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
327 fname = cleanup = changegroup.writebundle(cg, fname, bundletype) |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
328 # keep written bundle? |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
329 if opts["bundle"]: |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
330 cleanup = None |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
331 if not other.local(): |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
332 # use the created uncompressed bundlerepo |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
333 other = bundlerepo.bundlerepository(ui, repo.root, fname) |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
334 |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
335 chlist = other.changelog.nodesbetween(incoming, revs)[0] |
7716
4ad12930a459
graphlog: extract large parts of repeated code from incoming/outgoing
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7715
diff
changeset
|
336 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
|
337 displayer = show_changeset(ui, other, opts, buffered=True) |
8a4773bcbaec
graphlog: extract some setup code out of common functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9259
diff
changeset
|
338 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
|
339 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
|
340 |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
341 finally: |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
342 if hasattr(other, 'close'): |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
343 other.close() |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
344 if cleanup: |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
345 os.unlink(cleanup) |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
346 |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
347 def uisetup(ui): |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
348 '''Initialize the extension.''' |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
349 _wrapcmd(ui, 'log', commands.table, graphlog) |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
350 _wrapcmd(ui, 'incoming', commands.table, gincoming) |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
351 _wrapcmd(ui, 'outgoing', commands.table, goutgoing) |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
352 |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
353 def _wrapcmd(ui, cmd, table, wrapfn): |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
354 '''wrap the command''' |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
355 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
|
356 if kwargs['graph']: |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
357 return wrapfn(*args, **kwargs) |
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
358 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
|
359 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
|
360 entry[1].append(('G', 'graph', None, _("show the revision DAG"))) |
7426
df0962f6c54e
Graphlog extension adds a --graph option to log/in/out
Alpar Juttner <alpar@cs.elte.hu>
parents:
7383
diff
changeset
|
361 |
4344 | 362 cmdtable = { |
363 "glog": | |
4730
eadfaa9ec487
Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4633
diff
changeset
|
364 (graphlog, |
eadfaa9ec487
Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4633
diff
changeset
|
365 [('l', 'limit', '', _('limit number of changes displayed')), |
eadfaa9ec487
Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4633
diff
changeset
|
366 ('p', 'patch', False, _('show patch')), |
eadfaa9ec487
Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4633
diff
changeset
|
367 ('r', 'rev', [], _('show the specified revision or range')), |
6192
cd65a67aff31
Introduce templateopts and logopts to reduce duplicate option definitions.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5968
diff
changeset
|
368 ] + templateopts, |
5942
b75105de8573
glog shows at most one file: correct synopsis
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5940
diff
changeset
|
369 _('hg glog [OPTION]... [FILE]')), |
4344 | 370 } |