##// END OF EJS Templates
perf: support measuring bdiff for all changeset related data...
Gregory Szorc -
r30337:6ecad4b7 default
parent child Browse files
Show More
@@ -748,7 +748,8 b' def perffncacheencode(ui, repo, **opts):'
748 fm.end()
748 fm.end()
749
749
750 @command('perfbdiff', revlogopts + formatteropts + [
750 @command('perfbdiff', revlogopts + formatteropts + [
751 ('', 'count', 1, 'number of revisions to test (when using --startrev)')],
751 ('', 'count', 1, 'number of revisions to test (when using --startrev)'),
752 ('', 'alldata', False, 'test bdiffs for all associated revisions')],
752 '-c|-m|FILE REV')
753 '-c|-m|FILE REV')
753 def perfbdiff(ui, repo, file_, rev=None, count=None, **opts):
754 def perfbdiff(ui, repo, file_, rev=None, count=None, **opts):
754 """benchmark a bdiff between revisions
755 """benchmark a bdiff between revisions
@@ -757,7 +758,14 b' def perfbdiff(ui, repo, file_, rev=None,'
757
758
758 With ``--count``, benchmark bdiffs between delta parents and self for N
759 With ``--count``, benchmark bdiffs between delta parents and self for N
759 revisions starting at the specified revision.
760 revisions starting at the specified revision.
761
762 With ``--alldata``, assume the requested revision is a changeset and
763 measure bdiffs for all changes related to that changeset (manifest
764 and filelogs).
760 """
765 """
766 if opts['alldata']:
767 opts['changelog'] = True
768
761 if opts.get('changelog') or opts.get('manifest'):
769 if opts.get('changelog') or opts.get('manifest'):
762 file_, rev = None, file_
770 file_, rev = None, file_
763 elif rev is None:
771 elif rev is None:
@@ -769,8 +777,25 b' def perfbdiff(ui, repo, file_, rev=None,'
769
777
770 startrev = r.rev(r.lookup(rev))
778 startrev = r.rev(r.lookup(rev))
771 for rev in range(startrev, min(startrev + count, len(r) - 1)):
779 for rev in range(startrev, min(startrev + count, len(r) - 1)):
772 dp = r.deltaparent(rev)
780 if opts['alldata']:
773 textpairs.append((r.revision(dp), r.revision(rev)))
781 # Load revisions associated with changeset.
782 ctx = repo[rev]
783 mtext = repo.manifest.revision(ctx.manifestnode())
784 for pctx in ctx.parents():
785 pman = repo.manifest.revision(pctx.manifestnode())
786 textpairs.append((pman, mtext))
787
788 # Load filelog revisions by iterating manifest delta.
789 man = ctx.manifest()
790 pman = ctx.p1().manifest()
791 for filename, change in pman.diff(man).items():
792 fctx = repo.file(filename)
793 f1 = fctx.revision(change[0][0] or -1)
794 f2 = fctx.revision(change[1][0] or -1)
795 textpairs.append((f1, f2))
796 else:
797 dp = r.deltaparent(rev)
798 textpairs.append((r.revision(dp), r.revision(rev)))
774
799
775 def d():
800 def d():
776 for pair in textpairs:
801 for pair in textpairs:
General Comments 0
You need to be logged in to leave comments. Login now