Show More
@@ -1031,6 +1031,71 b' def perfbdiff(ui, repo, file_, rev=None,' | |||||
1031 | with ready: |
|
1031 | with ready: | |
1032 | ready.notify_all() |
|
1032 | ready.notify_all() | |
1033 |
|
1033 | |||
|
1034 | @command('perfunidiff', revlogopts + formatteropts + [ | |||
|
1035 | ('', 'count', 1, 'number of revisions to test (when using --startrev)'), | |||
|
1036 | ('', 'alldata', False, 'test unidiffs for all associated revisions'), | |||
|
1037 | ], '-c|-m|FILE REV') | |||
|
1038 | def perfunidiff(ui, repo, file_, rev=None, count=None, **opts): | |||
|
1039 | """benchmark a unified diff between revisions | |||
|
1040 | ||||
|
1041 | This doesn't include any copy tracing - it's just a unified diff | |||
|
1042 | of the texts. | |||
|
1043 | ||||
|
1044 | By default, benchmark a diff between its delta parent and itself. | |||
|
1045 | ||||
|
1046 | With ``--count``, benchmark diffs between delta parents and self for N | |||
|
1047 | revisions starting at the specified revision. | |||
|
1048 | ||||
|
1049 | With ``--alldata``, assume the requested revision is a changeset and | |||
|
1050 | measure diffs for all changes related to that changeset (manifest | |||
|
1051 | and filelogs). | |||
|
1052 | """ | |||
|
1053 | if opts['alldata']: | |||
|
1054 | opts['changelog'] = True | |||
|
1055 | ||||
|
1056 | if opts.get('changelog') or opts.get('manifest'): | |||
|
1057 | file_, rev = None, file_ | |||
|
1058 | elif rev is None: | |||
|
1059 | raise error.CommandError('perfunidiff', 'invalid arguments') | |||
|
1060 | ||||
|
1061 | textpairs = [] | |||
|
1062 | ||||
|
1063 | r = cmdutil.openrevlog(repo, 'perfunidiff', file_, opts) | |||
|
1064 | ||||
|
1065 | startrev = r.rev(r.lookup(rev)) | |||
|
1066 | for rev in range(startrev, min(startrev + count, len(r) - 1)): | |||
|
1067 | if opts['alldata']: | |||
|
1068 | # Load revisions associated with changeset. | |||
|
1069 | ctx = repo[rev] | |||
|
1070 | mtext = repo.manifestlog._revlog.revision(ctx.manifestnode()) | |||
|
1071 | for pctx in ctx.parents(): | |||
|
1072 | pman = repo.manifestlog._revlog.revision(pctx.manifestnode()) | |||
|
1073 | textpairs.append((pman, mtext)) | |||
|
1074 | ||||
|
1075 | # Load filelog revisions by iterating manifest delta. | |||
|
1076 | man = ctx.manifest() | |||
|
1077 | pman = ctx.p1().manifest() | |||
|
1078 | for filename, change in pman.diff(man).items(): | |||
|
1079 | fctx = repo.file(filename) | |||
|
1080 | f1 = fctx.revision(change[0][0] or -1) | |||
|
1081 | f2 = fctx.revision(change[1][0] or -1) | |||
|
1082 | textpairs.append((f1, f2)) | |||
|
1083 | else: | |||
|
1084 | dp = r.deltaparent(rev) | |||
|
1085 | textpairs.append((r.revision(dp), r.revision(rev))) | |||
|
1086 | ||||
|
1087 | def d(): | |||
|
1088 | for left, right in textpairs: | |||
|
1089 | # The date strings don't matter, so we pass empty strings. | |||
|
1090 | headerlines, hunks = mdiff.unidiff( | |||
|
1091 | left, '', right, '', 'left', 'right') | |||
|
1092 | # consume iterators in roughly the way patch.py does | |||
|
1093 | b'\n'.join(headerlines) | |||
|
1094 | b''.join(sum((list(hlines) for hrange, hlines in hunks), [])) | |||
|
1095 | timer, fm = gettimer(ui, opts) | |||
|
1096 | timer(d) | |||
|
1097 | fm.end() | |||
|
1098 | ||||
1034 | @command('perfdiffwd', formatteropts) |
|
1099 | @command('perfdiffwd', formatteropts) | |
1035 | def perfdiffwd(ui, repo, **opts): |
|
1100 | def perfdiffwd(ui, repo, **opts): | |
1036 | """Profile diff of working directory changes""" |
|
1101 | """Profile diff of working directory changes""" |
@@ -114,6 +114,7 b' perfstatus' | |||||
114 | perftags (no help text available) |
|
114 | perftags (no help text available) | |
115 | perftemplating |
|
115 | perftemplating | |
116 | (no help text available) |
|
116 | (no help text available) | |
|
117 | perfunidiff benchmark a unified diff between revisions | |||
117 | perfvolatilesets |
|
118 | perfvolatilesets | |
118 | benchmark the computation of various volatile set |
|
119 | benchmark the computation of various volatile set | |
119 | perfwalk (no help text available) |
|
120 | perfwalk (no help text available) | |
@@ -126,6 +127,8 b' perfstatus' | |||||
126 | $ hg perfannotate a |
|
127 | $ hg perfannotate a | |
127 | $ hg perfbdiff -c 1 |
|
128 | $ hg perfbdiff -c 1 | |
128 | $ hg perfbdiff --alldata 1 |
|
129 | $ hg perfbdiff --alldata 1 | |
|
130 | $ hg perfunidiff -c 1 | |||
|
131 | $ hg perfunidiff --alldata 1 | |||
129 | $ hg perfbookmarks |
|
132 | $ hg perfbookmarks | |
130 | $ hg perfbranchmap |
|
133 | $ hg perfbranchmap | |
131 | $ hg perfcca |
|
134 | $ hg perfcca |
General Comments 0
You need to be logged in to leave comments.
Login now