contrib/perf.py
changeset 30144 14031d183048
parent 30143 2d858c771760
child 30145 113aa6145020
equal deleted inserted replaced
30143:2d858c771760 30144:14031d183048
   212         def restore(self):
   212         def restore(self):
   213             setattr(obj, name, origvalue)
   213             setattr(obj, name, origvalue)
   214 
   214 
   215     return attrutil()
   215     return attrutil()
   216 
   216 
       
   217 # utilities to examine each internal API changes
       
   218 
       
   219 def getbranchmapsubsettable():
       
   220     # for "historical portability":
       
   221     # subsettable is defined in:
       
   222     # - branchmap since 2.9 (or 175c6fd8cacc)
       
   223     # - repoview since 2.5 (or 59a9f18d4587)
       
   224     for mod in (branchmap, repoview):
       
   225         subsettable = getattr(mod, 'subsettable', None)
       
   226         if subsettable:
       
   227             return subsettable
       
   228 
       
   229     # bisecting in bcee63733aad::59a9f18d4587 can reach here (both
       
   230     # branchmap and repoview modules exist, but subsettable attribute
       
   231     # doesn't)
       
   232     raise error.Abort(("perfbranchmap not available with this Mercurial"),
       
   233                       hint="use 2.5 or later")
       
   234 
   217 # perf commands
   235 # perf commands
   218 
   236 
   219 @command('perfwalk', formatteropts)
   237 @command('perfwalk', formatteropts)
   220 def perfwalk(ui, repo, *pats, **opts):
   238 def perfwalk(ui, repo, *pats, **opts):
   221     timer, fm = gettimer(ui, opts)
   239     timer, fm = gettimer(ui, opts)
   846                 view._branchcaches.pop(filtername, None)
   864                 view._branchcaches.pop(filtername, None)
   847             view.branchmap()
   865             view.branchmap()
   848         return d
   866         return d
   849     # add filter in smaller subset to bigger subset
   867     # add filter in smaller subset to bigger subset
   850     possiblefilters = set(repoview.filtertable)
   868     possiblefilters = set(repoview.filtertable)
       
   869     subsettable = getbranchmapsubsettable()
   851     allfilters = []
   870     allfilters = []
   852     while possiblefilters:
   871     while possiblefilters:
   853         for name in possiblefilters:
   872         for name in possiblefilters:
   854             subset = branchmap.subsettable.get(name)
   873             subset = subsettable.get(name)
   855             if subset not in possiblefilters:
   874             if subset not in possiblefilters:
   856                 break
   875                 break
   857         else:
   876         else:
   858             assert False, 'subset cycle %s!' % possiblefilters
   877             assert False, 'subset cycle %s!' % possiblefilters
   859         allfilters.append(name)
   878         allfilters.append(name)