Mercurial > hg
comparison hgext/graphlog.py @ 9368:8a4773bcbaec
graphlog: extract some setup code out of common functions
author | Dirkjan Ochtman <dirkjan@ochtman.nl> |
---|---|
date | Thu, 20 Aug 2009 08:35:03 +0200 |
parents | 19a4b8fd5c48 |
children | 20140c249e63 |
comparison
equal
deleted
inserted
replaced
9367:1ef630452e0b | 9368:8a4773bcbaec |
---|---|
20 from mercurial import bundlerepo, changegroup, cmdutil, commands, extensions | 20 from mercurial import bundlerepo, changegroup, cmdutil, commands, extensions |
21 from mercurial import hg, url, util, graphmod | 21 from mercurial import hg, url, util, graphmod |
22 | 22 |
23 ASCIIDATA = 'ASC' | 23 ASCIIDATA = 'ASC' |
24 | 24 |
25 def asciiformat(ui, repo, revdag, opts, parentrepo=None): | 25 def asciiformat(revdag, displayer, parents): |
26 """formats a changelog DAG walk for ASCII output""" | 26 """formats a changelog DAG walk for ASCII output""" |
27 if parentrepo is None: | |
28 parentrepo = repo | |
29 showparents = [ctx.node() for ctx in parentrepo[None].parents()] | |
30 displayer = show_changeset(ui, repo, opts, buffered=True) | |
31 for (id, type, ctx, parentids) in revdag: | 27 for (id, type, ctx, parentids) in revdag: |
32 if type != graphmod.CHANGESET: | 28 if type != graphmod.CHANGESET: |
33 continue | 29 continue |
34 displayer.show(ctx) | 30 displayer.show(ctx) |
35 lines = displayer.hunk.pop(ctx.rev()).split('\n')[:-1] | 31 lines = displayer.hunk.pop(ctx.rev()).split('\n')[:-1] |
36 char = ctx.node() in showparents and '@' or 'o' | 32 char = ctx.node() in parents and '@' or 'o' |
37 yield (id, ASCIIDATA, (char, lines), parentids) | 33 yield (id, ASCIIDATA, (char, lines), parentids) |
38 | 34 |
39 def asciiedges(nodes): | 35 def asciiedges(nodes): |
40 """adds edge info to changelog DAG walk suitable for ascii()""" | 36 """adds edge info to changelog DAG walk suitable for ascii()""" |
41 seen = [] | 37 seen = [] |
257 if path: # could be reset in canonpath | 253 if path: # could be reset in canonpath |
258 revdag = graphmod.filerevs(repo, path, start, stop) | 254 revdag = graphmod.filerevs(repo, path, start, stop) |
259 else: | 255 else: |
260 revdag = graphmod.revisions(repo, start, stop) | 256 revdag = graphmod.revisions(repo, start, stop) |
261 | 257 |
262 fmtdag = asciiformat(ui, repo, revdag, opts) | 258 displayer = show_changeset(ui, repo, opts, buffered=True) |
259 showparents = [ctx.node() for ctx in repo[None].parents()] | |
260 fmtdag = asciiformat(revdag, displayer, showparents) | |
263 ascii(ui, asciiedges(fmtdag)) | 261 ascii(ui, asciiedges(fmtdag)) |
264 | 262 |
265 def graphrevs(repo, nodes, opts): | 263 def graphrevs(repo, nodes, opts): |
266 limit = cmdutil.loglimit(opts) | 264 limit = cmdutil.loglimit(opts) |
267 nodes.reverse() | 265 nodes.reverse() |
292 ui.status(_("no changes found\n")) | 290 ui.status(_("no changes found\n")) |
293 return | 291 return |
294 | 292 |
295 o = repo.changelog.nodesbetween(o, revs)[0] | 293 o = repo.changelog.nodesbetween(o, revs)[0] |
296 revdag = graphrevs(repo, o, opts) | 294 revdag = graphrevs(repo, o, opts) |
297 fmtdag = asciiformat(ui, repo, revdag, opts) | 295 displayer = show_changeset(ui, repo, opts, buffered=True) |
296 showparents = [ctx.node() for ctx in repo[None].parents()] | |
297 fmtdag = asciiformat(revdag, displayer, showparents) | |
298 ascii(ui, asciiedges(fmtdag)) | 298 ascii(ui, asciiedges(fmtdag)) |
299 | 299 |
300 def gincoming(ui, repo, source="default", **opts): | 300 def gincoming(ui, repo, source="default", **opts): |
301 """show the incoming changesets alongside an ASCII revision graph | 301 """show the incoming changesets alongside an ASCII revision graph |
302 | 302 |
341 # use the created uncompressed bundlerepo | 341 # use the created uncompressed bundlerepo |
342 other = bundlerepo.bundlerepository(ui, repo.root, fname) | 342 other = bundlerepo.bundlerepository(ui, repo.root, fname) |
343 | 343 |
344 chlist = other.changelog.nodesbetween(incoming, revs)[0] | 344 chlist = other.changelog.nodesbetween(incoming, revs)[0] |
345 revdag = graphrevs(other, chlist, opts) | 345 revdag = graphrevs(other, chlist, opts) |
346 fmtdag = asciiformat(ui, other, revdag, opts, parentrepo=repo) | 346 displayer = show_changeset(ui, other, opts, buffered=True) |
347 showparents = [ctx.node() for ctx in repo[None].parents()] | |
348 fmtdag = asciiformat(revdag, displayer, showparents) | |
347 ascii(ui, asciiedges(fmtdag)) | 349 ascii(ui, asciiedges(fmtdag)) |
348 | 350 |
349 finally: | 351 finally: |
350 if hasattr(other, 'close'): | 352 if hasattr(other, 'close'): |
351 other.close() | 353 other.close() |