mercurial/dagutil.py
changeset 39172 8973fc62bfff
parent 39167 136ed75bbe12
child 39175 bbb855c412c6
equal deleted inserted replaced
39171:abce899c985f 39172:8973fc62bfff
    21     Pluralized params are lists or sets.
    21     Pluralized params are lists or sets.
    22     '''
    22     '''
    23 
    23 
    24     def __init__(self):
    24     def __init__(self):
    25         self._inverse = None
    25         self._inverse = None
    26 
       
    27     def heads(self):
       
    28         '''list of head ixs'''
       
    29         raise NotImplementedError
       
    30 
    26 
    31     def parents(self, ix):
    27     def parents(self, ix):
    32         '''list of parents ixs of ix'''
    28         '''list of parents ixs of ix'''
    33         raise NotImplementedError
    29         raise NotImplementedError
    34 
    30 
    63     '''generic dag interface to a revlog'''
    59     '''generic dag interface to a revlog'''
    64 
    60 
    65     def __init__(self, revlog):
    61     def __init__(self, revlog):
    66         basedag.__init__(self)
    62         basedag.__init__(self)
    67         self._revlog = revlog
    63         self._revlog = revlog
    68         self._heads = None
       
    69 
       
    70     def heads(self):
       
    71         if self._heads is None:
       
    72             self._heads = self._getheads()
       
    73         return self._heads
       
    74 
    64 
    75 class revlogdag(revlogbaseddag):
    65 class revlogdag(revlogbaseddag):
    76     '''dag interface to a revlog'''
    66     '''dag interface to a revlog'''
    77 
    67 
    78     def __init__(self, revlog, localsubset=None):
    68     def __init__(self, revlog):
    79         revlogbaseddag.__init__(self, revlog)
    69         revlogbaseddag.__init__(self, revlog)
    80         self._heads = localsubset
       
    81 
       
    82     def _getheads(self):
       
    83         return [r for r in self._revlog.headrevs() if r != nullrev]
       
    84 
    70 
    85     def parents(self, ix):
    71     def parents(self, ix):
    86         rlog = self._revlog
    72         rlog = self._revlog
    87         idx = rlog.index
    73         idx = rlog.index
    88         revdata = idx[ix]
    74         revdata = idx[ix]
   171             if isroot:
   157             if isroot:
   172                 roots.append(rev)
   158                 roots.append(rev)
   173             rev -= 1
   159             rev -= 1
   174         self._walkfrom = rev
   160         self._walkfrom = rev
   175 
   161 
   176     def _getheads(self):
       
   177         self._walkto(nullrev)
       
   178         return self._roots
       
   179 
       
   180     def parents(self, ix):
   162     def parents(self, ix):
   181         if ix is None:
   163         if ix is None:
   182             return []
   164             return []
   183         if ix <= self._walkfrom:
   165         if ix <= self._walkfrom:
   184             self._walkto(ix)
   166             self._walkto(ix)