Show More
@@ -2652,14 +2652,18 def displaygraph(ui, repo, dag, displaye | |||
|
2652 | 2652 | revmatchfn = None |
|
2653 | 2653 | if filematcher is not None: |
|
2654 | 2654 | revmatchfn = filematcher(ctx.rev()) |
|
2655 | displayer.show(ctx, copies=copies, matchfn=revmatchfn) | |
|
2655 | edges = edgefn(type, char, state, rev, parents) | |
|
2656 | firstedge = next(edges) | |
|
2657 | width = firstedge[2] | |
|
2658 | displayer.show(ctx, copies=copies, matchfn=revmatchfn, | |
|
2659 | _graphwidth=width) | |
|
2656 | 2660 | lines = displayer.hunk.pop(rev).split('\n') |
|
2657 | 2661 | if not lines[-1]: |
|
2658 | 2662 | del lines[-1] |
|
2659 | 2663 | displayer.flush(ctx) |
|
2660 | edges = edgefn(type, char, lines, state, rev, parents) | |
|
2661 | for type, char, lines, coldata in edges: | |
|
2664 | for type, char, width, coldata in itertools.chain([firstedge], edges): | |
|
2662 | 2665 | graphmod.ascii(ui, state, type, char, lines, coldata) |
|
2666 | lines = [] | |
|
2663 | 2667 | displayer.close() |
|
2664 | 2668 | |
|
2665 | 2669 | def graphlog(ui, repo, pats, opts): |
@@ -172,7 +172,7 def colored(dag, repo): | |||
|
172 | 172 | yield (cur, type, data, (col, color), edges) |
|
173 | 173 | seen = next |
|
174 | 174 | |
|
175 |
def asciiedges(type, char |
|
|
175 | def asciiedges(type, char, state, rev, parents): | |
|
176 | 176 | """adds edge info to changelog DAG walk suitable for ascii()""" |
|
177 | 177 | seen = state['seen'] |
|
178 | 178 | if rev not in seen: |
@@ -192,6 +192,7 def asciiedges(type, char, lines, state, | |||
|
192 | 192 | state['edges'][parent] = state['styles'].get(ptype, '|') |
|
193 | 193 | |
|
194 | 194 | ncols = len(seen) |
|
195 | width = 1 + ncols * 2 | |
|
195 | 196 | nextseen = seen[:] |
|
196 | 197 | nextseen[nodeidx:nodeidx + 1] = newparents |
|
197 | 198 | edges = [(nodeidx, nextseen.index(p)) for p in knownparents] |
@@ -205,9 +206,9 def asciiedges(type, char, lines, state, | |||
|
205 | 206 | edges.append((nodeidx, nodeidx)) |
|
206 | 207 | edges.append((nodeidx, nodeidx + 1)) |
|
207 | 208 | nmorecols = 1 |
|
208 | yield (type, char, lines, (nodeidx, edges, ncols, nmorecols)) | |
|
209 | width += 2 | |
|
210 | yield (type, char, width, (nodeidx, edges, ncols, nmorecols)) | |
|
209 | 211 | char = '\\' |
|
210 | lines = [] | |
|
211 | 212 | nodeidx += 1 |
|
212 | 213 | ncols += 1 |
|
213 | 214 | edges = [] |
@@ -218,9 +219,11 def asciiedges(type, char, lines, state, | |||
|
218 | 219 | if len(newparents) > 1: |
|
219 | 220 | edges.append((nodeidx, nodeidx + 1)) |
|
220 | 221 | nmorecols = len(nextseen) - ncols |
|
222 | if nmorecols > 0: | |
|
223 | width += 2 | |
|
221 | 224 | # remove current node from edge characters, no longer needed |
|
222 | 225 | state['edges'].pop(rev, None) |
|
223 |
yield (type, char, |
|
|
226 | yield (type, char, width, (nodeidx, edges, ncols, nmorecols)) | |
|
224 | 227 | |
|
225 | 228 | def _fixlongrightedges(edges): |
|
226 | 229 | for (i, (start, end)) in enumerate(edges): |
@@ -469,6 +469,13 def showgraphnode(repo, ctx, **args): | |||
|
469 | 469 | else: |
|
470 | 470 | return 'o' |
|
471 | 471 | |
|
472 | @templatekeyword('graphwidth') | |
|
473 | def showgraphwidth(repo, ctx, templ, **args): | |
|
474 | """Integer. The width of the graph drawn by 'log --graph' or zero.""" | |
|
475 | # The value args['graphwidth'] will be this function, so we use an internal | |
|
476 | # name to pass the value through props into this function. | |
|
477 | return args.get('_graphwidth', 0) | |
|
478 | ||
|
472 | 479 | @templatekeyword('index') |
|
473 | 480 | def showindex(**args): |
|
474 | 481 | """Integer. The current iteration of the loop. (0 indexed)""" |
@@ -4319,3 +4319,155 Test that template function in extension | |||
|
4319 | 4319 | custom |
|
4320 | 4320 | |
|
4321 | 4321 | $ cd .. |
|
4322 | ||
|
4323 | Test 'graphwidth' in 'hg log' on various topologies. The key here is that the | |
|
4324 | printed graphwidths 3, 5, 7, etc. should all line up in their respective | |
|
4325 | columns. We don't care about other aspects of the graph rendering here. | |
|
4326 | ||
|
4327 | $ hg init graphwidth | |
|
4328 | $ cd graphwidth | |
|
4329 | ||
|
4330 | $ wrappabletext="a a a a a a a a a a a a" | |
|
4331 | ||
|
4332 | $ printf "first\n" > file | |
|
4333 | $ hg add file | |
|
4334 | $ hg commit -m "$wrappabletext" | |
|
4335 | ||
|
4336 | $ printf "first\nsecond\n" > file | |
|
4337 | $ hg commit -m "$wrappabletext" | |
|
4338 | ||
|
4339 | $ hg checkout 0 | |
|
4340 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
4341 | $ printf "third\nfirst\n" > file | |
|
4342 | $ hg commit -m "$wrappabletext" | |
|
4343 | created new head | |
|
4344 | ||
|
4345 | $ hg merge | |
|
4346 | merging file | |
|
4347 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved | |
|
4348 | (branch merge, don't forget to commit) | |
|
4349 | ||
|
4350 | $ hg log --graph -T "{graphwidth}" | |
|
4351 | @ 3 | |
|
4352 | | | |
|
4353 | | @ 5 | |
|
4354 | |/ | |
|
4355 | o 3 | |
|
4356 | ||
|
4357 | $ hg commit -m "$wrappabletext" | |
|
4358 | ||
|
4359 | $ hg log --graph -T "{graphwidth}" | |
|
4360 | @ 5 | |
|
4361 | |\ | |
|
4362 | | o 5 | |
|
4363 | | | | |
|
4364 | o | 5 | |
|
4365 | |/ | |
|
4366 | o 3 | |
|
4367 | ||
|
4368 | ||
|
4369 | $ hg checkout 0 | |
|
4370 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
4371 | $ printf "third\nfirst\nsecond\n" > file | |
|
4372 | $ hg commit -m "$wrappabletext" | |
|
4373 | created new head | |
|
4374 | ||
|
4375 | $ hg log --graph -T "{graphwidth}" | |
|
4376 | @ 3 | |
|
4377 | | | |
|
4378 | | o 7 | |
|
4379 | | |\ | |
|
4380 | +---o 7 | |
|
4381 | | | | |
|
4382 | | o 5 | |
|
4383 | |/ | |
|
4384 | o 3 | |
|
4385 | ||
|
4386 | ||
|
4387 | $ hg log --graph -T "{graphwidth}" -r 3 | |
|
4388 | o 5 | |
|
4389 | |\ | |
|
4390 | ~ ~ | |
|
4391 | ||
|
4392 | $ hg log --graph -T "{graphwidth}" -r 1 | |
|
4393 | o 3 | |
|
4394 | | | |
|
4395 | ~ | |
|
4396 | ||
|
4397 | $ hg merge | |
|
4398 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
4399 | (branch merge, don't forget to commit) | |
|
4400 | $ hg commit -m "$wrappabletext" | |
|
4401 | ||
|
4402 | $ printf "seventh\n" >> file | |
|
4403 | $ hg commit -m "$wrappabletext" | |
|
4404 | ||
|
4405 | $ hg log --graph -T "{graphwidth}" | |
|
4406 | @ 3 | |
|
4407 | | | |
|
4408 | o 5 | |
|
4409 | |\ | |
|
4410 | | o 5 | |
|
4411 | | | | |
|
4412 | o | 7 | |
|
4413 | |\ \ | |
|
4414 | | o | 7 | |
|
4415 | | |/ | |
|
4416 | o / 5 | |
|
4417 | |/ | |
|
4418 | o 3 | |
|
4419 | ||
|
4420 | ||
|
4421 | The point of graphwidth is to allow wrapping that accounts for the space taken | |
|
4422 | by the graph. | |
|
4423 | ||
|
4424 | $ COLUMNS=10 hg log --graph -T "{fill(desc, termwidth - graphwidth)}" | |
|
4425 | @ a a a a | |
|
4426 | | a a a a | |
|
4427 | | a a a a | |
|
4428 | o a a a | |
|
4429 | |\ a a a | |
|
4430 | | | a a a | |
|
4431 | | | a a a | |
|
4432 | | o a a a | |
|
4433 | | | a a a | |
|
4434 | | | a a a | |
|
4435 | | | a a a | |
|
4436 | o | a a | |
|
4437 | |\ \ a a | |
|
4438 | | | | a a | |
|
4439 | | | | a a | |
|
4440 | | | | a a | |
|
4441 | | | | a a | |
|
4442 | | o | a a | |
|
4443 | | |/ a a | |
|
4444 | | | a a | |
|
4445 | | | a a | |
|
4446 | | | a a | |
|
4447 | | | a a | |
|
4448 | o | a a a | |
|
4449 | |/ a a a | |
|
4450 | | a a a | |
|
4451 | | a a a | |
|
4452 | o a a a a | |
|
4453 | a a a a | |
|
4454 | a a a a | |
|
4455 | ||
|
4456 | Something tricky happens when there are elided nodes; the next drawn row of | |
|
4457 | edges can be more than one column wider, but the graph width only increases by | |
|
4458 | one column. The remaining columns are added in between the nodes. | |
|
4459 | ||
|
4460 | $ hg log --graph -T "{graphwidth}" -r "0|2|4|5" | |
|
4461 | o 5 | |
|
4462 | |\ | |
|
4463 | | \ | |
|
4464 | | :\ | |
|
4465 | o : : 7 | |
|
4466 | :/ / | |
|
4467 | : o 5 | |
|
4468 | :/ | |
|
4469 | o 3 | |
|
4470 | ||
|
4471 | ||
|
4472 | $ cd .. | |
|
4473 |
General Comments 0
You need to be logged in to leave comments.
Login now