--- a/hgext/graphlog.py Mon Jan 26 16:40:43 2009 +0100
+++ b/hgext/graphlog.py Mon Jan 26 16:50:27 2009 +0100
@@ -282,26 +282,43 @@
else:
revdag = revisions(repo, start, stop)
- repo_parents = repo.dirstate.parents()
+ graphdag = graphabledag(ui, repo, revdag, opts)
+ ascii(ui, grapher(graphdag))
+
+def graphrevs(repo, nodes, opts):
+ nodes.reverse()
+ include = util.set(nodes)
+ limit = cmdutil.loglimit(opts)
+ count = 0
+ for node in nodes:
+ if count >= limit:
+ break
+ ctx = repo[node]
+ parents = [p.rev() for p in ctx.parents() if p.node() in include]
+ parents.sort()
+ yield (ctx, parents)
+ count += 1
+
+def graphabledag(ui, repo, revdag, opts):
+ showparents = [ctx.node() for ctx in repo[None].parents()]
displayer = show_changeset(ui, repo, opts, buffered=True)
- def graphabledag():
- for (ctx, parents) in revdag:
- # log_strings is the list of all log strings to draw alongside
- # the graph.
- displayer.show(ctx)
- lines = displayer.hunk.pop(ctx.rev()).split("\n")[:-1]
- char = ctx.node() in repo_parents and '@' or 'o'
- yield (ctx.rev(), parents, char, lines)
+ for (ctx, parents) in revdag:
+ displayer.show(ctx)
+ lines = displayer.hunk.pop(ctx.rev()).split('\n')[:-1]
+ char = ctx.node() in showparents and '@' or 'o'
+ yield (ctx.rev(), parents, char, lines)
+
+def goutgoing(ui, repo, dest=None, **opts):
+ """show the outgoing changesets alongside an ASCII revision graph
- ascii(ui, grapher(graphabledag()))
-
-def outgoing_revs(ui, repo, dest, opts):
- """cset DAG generator yielding (node, [parents]) tuples
+ Print the outgoing changesets alongside a revision graph drawn with
+ ASCII characters.
- This generator function walks through the revisions not found
- in the destination
+ Nodes printed as an @ character are parents of the working
+ directory.
"""
- limit = cmdutil.loglimit(opts)
+
+ check_unsupported_flags(opts)
dest, revs, checkout = hg.parseurl(
ui.expandpath(dest or 'default-push', dest or 'default'),
opts.get('rev'))
@@ -314,65 +331,11 @@
if not o:
ui.status(_("no changes found\n"))
return
+
o = repo.changelog.nodesbetween(o, revs)[0]
- o.reverse()
- revdict = {}
- for n in o:
- revdict[repo.changectx(n).rev()]=True
- count = 0
- for n in o:
- if count >= limit:
- break
- ctx = repo.changectx(n)
- parents = [p.rev() for p in ctx.parents() if p.rev() in revdict]
- parents.sort()
- yield (ctx, parents)
- count += 1
-
-def goutgoing(ui, repo, dest=None, **opts):
- """show the outgoing changesets alongside an ASCII revision graph
-
- Print the outgoing changesets alongside a revision graph drawn with
- ASCII characters.
-
- Nodes printed as an @ character are parents of the working
- directory.
- """
- check_unsupported_flags(opts)
- revdag = outgoing_revs(ui, repo, dest, opts)
- repo_parents = repo.dirstate.parents()
- displayer = show_changeset(ui, repo, opts, buffered=True)
- def graphabledag():
- for (ctx, parents) in revdag:
- # log_strings is the list of all log strings to draw alongside
- # the graph.
- displayer.show(ctx)
- lines = displayer.hunk.pop(ctx.rev()).split("\n")[:-1]
- char = ctx.node() in repo_parents and '@' or 'o'
- yield (ctx.rev(), parents, char, lines)
-
- ascii(ui, grapher(graphabledag()))
-
-def incoming_revs(other, chlist, opts):
- """cset DAG generator yielding (node, [parents]) tuples
-
- This generator function walks through the revisions of the destination
- not found in repo
- """
- limit = cmdutil.loglimit(opts)
- chlist.reverse()
- revdict = {}
- for n in chlist:
- revdict[other.changectx(n).rev()]=True
- count = 0
- for n in chlist:
- if count >= limit:
- break
- ctx = other.changectx(n)
- parents = [p.rev() for p in ctx.parents() if p.rev() in revdict]
- parents.sort()
- yield (ctx, parents)
- count += 1
+ revdag = graphrevs(repo, o, opts)
+ graphdag = graphabledag(ui, repo, revdag, opts)
+ ascii(ui, grapher(graphdag))
def gincoming(ui, repo, source="default", **opts):
"""show the incoming changesets alongside an ASCII revision graph
@@ -403,6 +366,7 @@
cleanup = None
try:
+
fname = opts["bundle"]
if fname or not other.local():
# create a bundle (uncompressed if other repo is not local)
@@ -420,19 +384,12 @@
other = bundlerepo.bundlerepository(ui, repo.root, fname)
chlist = other.changelog.nodesbetween(incoming, revs)[0]
- revdag = incoming_revs(other, chlist, opts)
+ revdag = graphrevs(other, chlist, opts)
other_parents = []
displayer = show_changeset(ui, other, opts, buffered=True)
- def graphabledag():
- for (ctx, parents) in revdag:
- # log_strings is the list of all log strings to draw alongside
- # the graph.
- displayer.show(ctx)
- lines = displayer.hunk.pop(ctx.rev()).split("\n")[:-1]
- char = ctx.node() in other_parents and '@' or 'o'
- yield (ctx.rev(), parents, char, lines)
+ graphdag = graphabledag(ui, repo, revdag, opts)
+ ascii(ui, grapher(graphdag))
- ascii(ui, grapher(graphabledag()))
finally:
if hasattr(other, 'close'):
other.close()