mercurial/revlog.py
changeset 1074 55bf5cfde69e
parent 1073 7b35a980b982
child 1083 30974cf73435
equal deleted inserted replaced
1073:7b35a980b982 1074:55bf5cfde69e
   168     def start(self, rev): return self.index[rev][0]
   168     def start(self, rev): return self.index[rev][0]
   169     def length(self, rev): return self.index[rev][1]
   169     def length(self, rev): return self.index[rev][1]
   170     def end(self, rev): return self.start(rev) + self.length(rev)
   170     def end(self, rev): return self.start(rev) + self.length(rev)
   171     def base(self, rev): return self.index[rev][2]
   171     def base(self, rev): return self.index[rev][2]
   172 
   172 
       
   173     def reachable(self, rev, stop=None):
       
   174         reachable = {}
       
   175         visit = [rev]
       
   176         reachable[rev] = 1
       
   177         if stop:
       
   178             stopn = self.rev(stop)
       
   179         else:
       
   180             stopn = 0
       
   181         while visit:
       
   182             n = visit.pop(0)
       
   183             if n == stop:
       
   184                 continue
       
   185             if n == nullid:
       
   186                 continue
       
   187             for p in self.parents(n):
       
   188                 if self.rev(p) < stopn:
       
   189                     continue
       
   190                 if p not in reachable:
       
   191                     reachable[p] = 1
       
   192                     visit.append(p)
       
   193         return reachable
       
   194 
   173     def heads(self, stop=None):
   195     def heads(self, stop=None):
   174         p = {}
   196         p = {}
   175         h = []
   197         h = []
   176         stoprev = 0
   198         stoprev = 0
   177         if stop and stop in self.nodemap:
   199         if stop and stop in self.nodemap: