Rev 5: pre-smash the revision ids to their short form, so we don't have to deal with it later. in http://bzr.arbash-meinel.com/plugins/kndx_to_dot
John Arbash Meinel
john at arbash-meinel.com
Wed Apr 11 03:46:21 BST 2007
At http://bzr.arbash-meinel.com/plugins/kndx_to_dot
------------------------------------------------------------
revno: 5
revision-id: john at arbash-meinel.com-20070411024617-d4w6xfqv46vm5zfr
parent: john at arbash-meinel.com-20070410213652-y9u56him1kmu8ksh
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: kndx_to_dot
timestamp: Tue 2007-04-10 21:46:17 -0500
message:
pre-smash the revision ids to their short form, so we don't have to deal with it later.
modified:
__init__.py __init__.py-20070410212739-0uwundx7uoho7f6n-1
-------------- next part --------------
=== modified file '__init__.py'
--- a/__init__.py 2007-04-10 21:36:52 +0000
+++ b/__init__.py 2007-04-11 02:46:17 +0000
@@ -56,7 +56,12 @@
kndx = a_knit._index
versions = kndx.get_versions()
- version_idxs = dict((v, o) for o, v in enumerate(versions))
+ if short:
+ version_idxs = dict((v, o) for o, v in enumerate(versions))
+ name_map = dict((v, make_short_name(version_idxs, v))
+ for v in versions)
+ parent_map = dict((v, kndx.get_parents(v)) for v in versions)
+
if end is not None:
try:
versions = versions[:int(end)+1]
@@ -68,7 +73,12 @@
except ValueError:
versions = versions[versions.index(start):]
- generate_dot(kndx, short, version_idxs, versions, self.outf)
+ if short:
+ versions = [name_map[v] for v in versions]
+ parent_map = dict((name_map[v], [name_map[p] for p in ps])
+ for v,ps in parent_map.iteritems())
+
+ generate_dot(versions, parent_map, self.outf)
_short_revision_id_re = lazy_regex.lazy_compile(
@@ -93,27 +103,45 @@
return "%s %s" % (idx, version)
-def generate_dot(kndx, short, version_idxs, versions, output):
+def generate_dot(versions, parent_map, output):
+ """Create a dot graph for the given versions."""
output.write('digraph T {\n'
' node [shape=box]\n'
)
- for version in versions:
- if short:
- sversion = make_short_name(version_idxs, version)
- else:
- sversion = version
- parents = kndx.get_parents(version)
- if short:
- sparents = [make_short_name(version_idxs, p)
- for p in parents]
- else:
- sparents = parents
+ mainline = determine_mainline(versions, parent_map)
+ for version in versions:
+ for parent in parent_map[version]:
+ output.write(' "%s" -> "%s"' % (parent, version))
+ if parent in mainline and version in mainline:
+ output.write(' [weight=10, color=blue]')
+ else:
+ output.write(' [weight=1, color=black]')
+ output.write(';\n')
+
+ output.write(' subgraph cluster_mainline {\n'
+ ' clusterrank=local;\n'
+ ' label=mainline;\n'
+ ' color=blue;\n'
+ )
+ for version in versions:
+ if version in mainline:
+ output.write(' "%s" [color=blue];\n' % (version,))
+ output.write(' }\n')
+
+ output.write('}\n')
+
+
+def determine_mainline(versions, parent_map):
+ """create a set of 'mainline' revisions for this graph."""
+ tip = versions[-1]
+ mainline = set()
+ while True:
+ mainline.add(tip)
+ parents = parent_map[tip]
if not parents:
- output.write(' "%s"\n' % (sversion,))
- else:
- for sparent in sparents:
- output.write(' "%s" -> "%s"\n' % (sparent, sversion))
- output.write('}\n')
+ break
+ tip = parents[0]
+ return mainline
commands.register_command(cmd_kndx2dot)
More information about the bazaar-commits
mailing list