Mercurial > hg
comparison mercurial/commands.py @ 11336:3dfbe26cfded
debugdag and debugindexdag: emit changelog/revlog DAGs as concise text
Mainly useful for reusing DAGs somewhere else, for example for attaching
them to a bug report, or for importing them into other environments
(like my test environment for incoming/outgoing discovery).
author | Peter Arrenbrecht <peter.arrenbrecht@gmail.com> |
---|---|
date | Thu, 10 Jun 2010 11:48:45 +0200 |
parents | 997ab9af81df |
children | 0f3c8a47960e |
comparison
equal
deleted
inserted
replaced
11335:3201ff1459dd | 11336:3dfbe26cfded |
---|---|
12 import hg, util, revlog, bundlerepo, extensions, copies, error | 12 import hg, util, revlog, bundlerepo, extensions, copies, error |
13 import patch, help, mdiff, url, encoding, templatekw, discovery | 13 import patch, help, mdiff, url, encoding, templatekw, discovery |
14 import archival, changegroup, cmdutil, sshserver, hbisect, hgweb, hgweb.server | 14 import archival, changegroup, cmdutil, sshserver, hbisect, hgweb, hgweb.server |
15 import merge as mergemod | 15 import merge as mergemod |
16 import minirst, revset | 16 import minirst, revset |
17 import dagparser | |
17 | 18 |
18 # Commands start here, listed alphabetically | 19 # Commands start here, listed alphabetically |
19 | 20 |
20 def add(ui, repo, *pats, **opts): | 21 def add(ui, repo, *pats, **opts): |
21 """add the specified files on the next commit | 22 """add the specified files on the next commit |
1020 rev = None | 1021 rev = None |
1021 for k, v in sorted(repo[rev].substate.items()): | 1022 for k, v in sorted(repo[rev].substate.items()): |
1022 ui.write('path %s\n' % k) | 1023 ui.write('path %s\n' % k) |
1023 ui.write(' source %s\n' % v[0]) | 1024 ui.write(' source %s\n' % v[0]) |
1024 ui.write(' revision %s\n' % v[1]) | 1025 ui.write(' revision %s\n' % v[1]) |
1026 | |
1027 def debugdag(ui, repo, file_=None, *revs, **opts): | |
1028 """format the changelog or an index DAG as a concise textual description | |
1029 | |
1030 If you pass a revlog index, the revlog's DAG is emitted. If you list | |
1031 revision numbers, they get labelled in the output as rN. | |
1032 | |
1033 Otherwise, the changelog DAG of the current repo is emitted. | |
1034 """ | |
1035 spaces = opts.get('spaces') | |
1036 dots = opts.get('dots') | |
1037 if file_: | |
1038 rlog = revlog.revlog(util.opener(os.getcwd(), audit=False), file_) | |
1039 revs = set((int(r) for r in revs)) | |
1040 def events(): | |
1041 for r in rlog: | |
1042 yield 'n', (r, list(set(p for p in rlog.parentrevs(r) if p != -1))) | |
1043 if r in revs: | |
1044 yield 'l', (r, "r%i" % r) | |
1045 elif repo: | |
1046 cl = repo.changelog | |
1047 tags = opts.get('tags') | |
1048 branches = opts.get('branches') | |
1049 if tags: | |
1050 labels = {} | |
1051 for l, n in repo.tags().items(): | |
1052 labels.setdefault(cl.rev(n), []).append(l) | |
1053 def events(): | |
1054 b = "default" | |
1055 for r in cl: | |
1056 if branches: | |
1057 newb = cl.read(cl.node(r))[5]['branch'] | |
1058 if newb != b: | |
1059 yield 'a', newb | |
1060 b = newb | |
1061 yield 'n', (r, list(set(p for p in cl.parentrevs(r) if p != -1))) | |
1062 if tags: | |
1063 ls = labels.get(r) | |
1064 if ls: | |
1065 for l in ls: | |
1066 yield 'l', (r, l) | |
1067 else: | |
1068 raise util.Abort(_('need repo for changelog dag')) | |
1069 | |
1070 for line in dagparser.dagtextlines(events(), | |
1071 addspaces=spaces, | |
1072 wraplabels=True, | |
1073 wrapannotations=True, | |
1074 wrapnonlinear=dots, | |
1075 usedots=dots, | |
1076 maxlinewidth=70): | |
1077 ui.write(line) | |
1078 ui.write("\n") | |
1025 | 1079 |
1026 def debugdata(ui, file_, rev): | 1080 def debugdata(ui, file_, rev): |
1027 """dump the contents of a data file revision""" | 1081 """dump the contents of a data file revision""" |
1028 r = revlog.revlog(util.opener(os.getcwd(), audit=False), file_[:-2] + ".i") | 1082 r = revlog.revlog(util.opener(os.getcwd(), audit=False), file_[:-2] + ".i") |
1029 try: | 1083 try: |
3873 "debugcommands": (debugcommands, [], _('[COMMAND]')), | 3927 "debugcommands": (debugcommands, [], _('[COMMAND]')), |
3874 "debugcomplete": | 3928 "debugcomplete": |
3875 (debugcomplete, | 3929 (debugcomplete, |
3876 [('o', 'options', None, _('show the command options'))], | 3930 [('o', 'options', None, _('show the command options'))], |
3877 _('[-o] CMD')), | 3931 _('[-o] CMD')), |
3932 "debugdag": | |
3933 (debugdag, | |
3934 [('t', 'tags', None, _('use tags as labels')), | |
3935 ('b', 'branches', None, _('annotate with branch names')), | |
3936 ('', 'dots', None, _('use dots for runs')), | |
3937 ('s', 'spaces', None, _('separate elements by spaces')), | |
3938 ], | |
3939 _('[OPTION]... [FILE [REV]...]')), | |
3878 "debugdate": | 3940 "debugdate": |
3879 (debugdate, | 3941 (debugdate, |
3880 [('e', 'extended', None, _('try extended date formats'))], | 3942 [('e', 'extended', None, _('try extended date formats'))], |
3881 _('[-e] DATE [RANGE]')), | 3943 _('[-e] DATE [RANGE]')), |
3882 "debugdata": (debugdata, [], _('FILE REV')), | 3944 "debugdata": (debugdata, [], _('FILE REV')), |
4231 "version": (version_, []), | 4293 "version": (version_, []), |
4232 } | 4294 } |
4233 | 4295 |
4234 norepo = ("clone init version help debugcommands debugcomplete debugdata" | 4296 norepo = ("clone init version help debugcommands debugcomplete debugdata" |
4235 " debugindex debugindexdot debugdate debuginstall debugfsinfo") | 4297 " debugindex debugindexdot debugdate debuginstall debugfsinfo") |
4236 optionalrepo = ("identify paths serve showconfig debugancestor") | 4298 optionalrepo = ("identify paths serve showconfig debugancestor debugdag") |