Mercurial > public > mercurial-scm > hg
comparison hgext/graphlog.py @ 7326:ba7ab8c4a577
graphlog: move functions around, eliminate helper function
Makes it easier to read all of the code.
author | Dirkjan Ochtman <dirkjan@ochtman.nl> |
---|---|
date | Fri, 07 Nov 2008 11:44:37 +0100 |
parents | f9985108d4e4 |
children | fac7e9070a19 |
comparison
equal
deleted
inserted
replaced
7325:f9985108d4e4 | 7326:ba7ab8c4a577 |
---|---|
12 from mercurial.commands import templateopts | 12 from mercurial.commands import templateopts |
13 from mercurial.i18n import _ | 13 from mercurial.i18n import _ |
14 from mercurial.node import nullrev | 14 from mercurial.node import nullrev |
15 from mercurial.util import Abort, canonpath | 15 from mercurial.util import Abort, canonpath |
16 from mercurial import util | 16 from mercurial import util |
17 | |
18 def get_rev_parents(repo, rev): | |
19 return [x for x in repo.changelog.parentrevs(rev) if x != nullrev] | |
17 | 20 |
18 def revision_grapher(repo, start_rev, stop_rev): | 21 def revision_grapher(repo, start_rev, stop_rev): |
19 """incremental revision grapher | 22 """incremental revision grapher |
20 | 23 |
21 This generator function walks through the revision history from | 24 This generator function walks through the revision history from |
118 if changerev <= stop_rev: | 121 if changerev <= stop_rev: |
119 break | 122 break |
120 revs = next_revs | 123 revs = next_revs |
121 filerev -= 1 | 124 filerev -= 1 |
122 | 125 |
123 def get_rev_parents(repo, rev): | |
124 return [x for x in repo.changelog.parentrevs(rev) if x != nullrev] | |
125 | |
126 def fix_long_right_edges(edges): | 126 def fix_long_right_edges(edges): |
127 for (i, (start, end)) in enumerate(edges): | 127 for (i, (start, end)) in enumerate(edges): |
128 if end > start: | 128 if end > start: |
129 edges[i] = (start, end + 1) | 129 edges[i] = (start, end + 1) |
130 | |
131 def get_nodeline_edges_tail( | |
132 node_index, p_node_index, n_columns, n_columns_diff, p_diff, fix_tail): | |
133 if fix_tail and n_columns_diff == p_diff and n_columns_diff != 0: | |
134 # Still going in the same non-vertical direction. | |
135 if n_columns_diff == -1: | |
136 start = max(node_index + 1, p_node_index) | |
137 tail = ["|", " "] * (start - node_index - 1) | |
138 tail.extend(["/", " "] * (n_columns - start)) | |
139 return tail | |
140 else: | |
141 return ["\\", " "] * (n_columns - node_index - 1) | |
142 else: | |
143 return ["|", " "] * (n_columns - node_index - 1) | |
130 | 144 |
131 def draw_edges(edges, nodeline, interline): | 145 def draw_edges(edges, nodeline, interline): |
132 for (start, end) in edges: | 146 for (start, end) in edges: |
133 if start == end + 1: | 147 if start == end + 1: |
134 interline[2 * end + 1] = "/" | 148 interline[2 * end + 1] = "/" |
142 (start, end) = (end,start) | 156 (start, end) = (end,start) |
143 for i in range(2 * start + 1, 2 * end): | 157 for i in range(2 * start + 1, 2 * end): |
144 if nodeline[i] != "+": | 158 if nodeline[i] != "+": |
145 nodeline[i] = "-" | 159 nodeline[i] = "-" |
146 | 160 |
147 def format_line(line, level, logstr): | |
148 text = "%-*s %s" % (2 * level, "".join(line), logstr) | |
149 return "%s\n" % text.rstrip() | |
150 | |
151 def get_nodeline_edges_tail( | |
152 node_index, p_node_index, n_columns, n_columns_diff, p_diff, fix_tail): | |
153 if fix_tail and n_columns_diff == p_diff and n_columns_diff != 0: | |
154 # Still going in the same non-vertical direction. | |
155 if n_columns_diff == -1: | |
156 start = max(node_index + 1, p_node_index) | |
157 tail = ["|", " "] * (start - node_index - 1) | |
158 tail.extend(["/", " "] * (n_columns - start)) | |
159 return tail | |
160 else: | |
161 return ["\\", " "] * (n_columns - node_index - 1) | |
162 else: | |
163 return ["|", " "] * (n_columns - node_index - 1) | |
164 | |
165 def get_padding_line(ni, n_columns, edges): | 161 def get_padding_line(ni, n_columns, edges): |
166 line = [] | 162 line = [] |
167 line.extend(["|", " "] * ni) | 163 line.extend(["|", " "] * ni) |
168 if (ni, ni - 1) in edges or (ni, ni) in edges: | 164 if (ni, ni - 1) in edges or (ni, ni) in edges: |
169 # (ni, ni - 1) (ni, ni) | 165 # (ni, ni - 1) (ni, ni) |
176 else: | 172 else: |
177 c = " " | 173 c = " " |
178 line.extend([c, " "]) | 174 line.extend([c, " "]) |
179 line.extend(["|", " "] * (n_columns - ni - 1)) | 175 line.extend(["|", " "] * (n_columns - ni - 1)) |
180 return line | 176 return line |
181 | |
182 def get_limit(limit_opt): | |
183 if limit_opt: | |
184 try: | |
185 limit = int(limit_opt) | |
186 except ValueError: | |
187 raise Abort(_("limit must be a positive integer")) | |
188 if limit <= 0: | |
189 raise Abort(_("limit must be positive")) | |
190 else: | |
191 limit = sys.maxint | |
192 return limit | |
193 | |
194 def get_revs(repo, rev_opt): | |
195 if rev_opt: | |
196 revs = revrange(repo, rev_opt) | |
197 return (max(revs), min(revs)) | |
198 else: | |
199 return (len(repo) - 1, 0) | |
200 | 177 |
201 def ascii(ui, grapher): | 178 def ascii(ui, grapher): |
202 """prints an ASCII graph of the DAG returned by the grapher | 179 """prints an ASCII graph of the DAG returned by the grapher |
203 | 180 |
204 grapher is a generator that emits tuples with the following elements: | 181 grapher is a generator that emits tuples with the following elements: |
291 lines.append(extra_interline) | 268 lines.append(extra_interline) |
292 | 269 |
293 # print lines | 270 # print lines |
294 indentation_level = max(n_columns, n_columns + n_columns_diff) | 271 indentation_level = max(n_columns, n_columns + n_columns_diff) |
295 for (line, logstr) in zip(lines, node_lines): | 272 for (line, logstr) in zip(lines, node_lines): |
296 ui.write(format_line(line, indentation_level, logstr)) | 273 ln = "%-*s %s" % (2 * indentation_level, "".join(line), logstr) |
274 ui.write(ln.rstrip() + '\n') | |
297 | 275 |
298 # ... and start over | 276 # ... and start over |
299 prev_node_index = node_index | 277 prev_node_index = node_index |
300 prev_n_columns_diff = n_columns_diff | 278 prev_n_columns_diff = n_columns_diff |
279 | |
280 def get_limit(limit_opt): | |
281 if limit_opt: | |
282 try: | |
283 limit = int(limit_opt) | |
284 except ValueError: | |
285 raise Abort(_("limit must be a positive integer")) | |
286 if limit <= 0: | |
287 raise Abort(_("limit must be positive")) | |
288 else: | |
289 limit = sys.maxint | |
290 return limit | |
291 | |
292 def get_revs(repo, rev_opt): | |
293 if rev_opt: | |
294 revs = revrange(repo, rev_opt) | |
295 return (max(revs), min(revs)) | |
296 else: | |
297 return (len(repo) - 1, 0) | |
301 | 298 |
302 def graphlog(ui, repo, path=None, **opts): | 299 def graphlog(ui, repo, path=None, **opts): |
303 """show revision history alongside an ASCII revision graph | 300 """show revision history alongside an ASCII revision graph |
304 | 301 |
305 Print a revision history alongside a revision graph drawn with | 302 Print a revision history alongside a revision graph drawn with |