hgext/hbisect.py
changeset 5726 19cbe2aea2bc
parent 5725 8114d4c915a7
child 5727 1325ebc29e29
equal deleted inserted replaced
5725:8114d4c915a7 5726:19cbe2aea2bc
    77         if not self.goodnodes:
    77         if not self.goodnodes:
    78             self.ui.warn(_("No good revision given\n"))
    78             self.ui.warn(_("No good revision given\n"))
    79             self.ui.warn(_("Marking the first revision as good\n"))
    79             self.ui.warn(_("Marking the first revision as good\n"))
    80 
    80 
    81         # build ancestors array
    81         # build ancestors array
    82         ancestors = [{}] * (cl.count() + 1) # an extra for [-1]
    82         ancestors = [[]] * (cl.count() + 1) # an extra for [-1]
    83 
    83 
    84         # clear goodnodes from array
    84         # clear goodnodes from array
    85         for good in self.goodnodes:
    85         for good in self.goodnodes:
    86             ancestors[cl.rev(good)] = None
    86             ancestors[cl.rev(good)] = None
    87         for rev in xrange(cl.count(), -1, -1):
    87         for rev in xrange(cl.count(), -1, -1):
    93             raise util.Abort(_("Inconsistent state, %s:%s is good and bad")
    93             raise util.Abort(_("Inconsistent state, %s:%s is good and bad")
    94                              % (badrev, hg.short(bad)))
    94                              % (badrev, hg.short(bad)))
    95 
    95 
    96         # accumulate ancestor lists
    96         # accumulate ancestor lists
    97         for rev in xrange(badrev + 1):
    97         for rev in xrange(badrev + 1):
    98             if ancestors[rev] == {}:
    98             if ancestors[rev] == []:
    99                 ancestors[rev] = {rev: 1}
    99                 p1, p2 = clparents(rev)
   100                 for p in clparents(rev):
   100                 a1, a2 = ancestors[p1], ancestors[p2]
   101                     if ancestors[p]:
   101                 if a1:
   102                         # add parent ancestors to our ancestors
   102                     if a2:
   103                         ancestors[rev].update(ancestors[p])
   103                         # merge ancestor lists
       
   104                         a = dict.fromkeys(a2)
       
   105                         a.update(dict.fromkeys(a1))
       
   106                         a[rev] = None
       
   107                         ancestors[rev] = a.keys()
       
   108                     else:
       
   109                         ancestors[rev] = a1 + [rev]
       
   110                 elif a2:
       
   111                     ancestors[rev] = a2 + [rev]
       
   112                 else:
       
   113                     ancestors[rev] = [rev]
   104 
   114 
   105         if badrev not in ancestors[badrev]:
   115         if badrev not in ancestors[badrev]:
   106             raise util.Abort(_("Could not find the first bad revision"))
   116             raise util.Abort(_("Could not find the first bad revision"))
   107 
   117 
   108         # have we narrowed it down to one entry?
   118         # have we narrowed it down to one entry?