mercurial/context.py
branchstable
changeset 13481 4eb1e9d6a7c9
parent 13476 b85a09f368bd
child 13552 7ab85fec60c3
equal deleted inserted replaced
13480:69418d4525d1 13481:4eb1e9d6a7c9
   548             return filectx(self._repo, f, fileid=n, filelog=flcache[f])
   548             return filectx(self._repo, f, fileid=n, filelog=flcache[f])
   549 
   549 
   550         return None
   550         return None
   551 
   551 
   552     def ancestors(self):
   552     def ancestors(self):
   553         seen = set()
   553         visit = {}
   554         visit = [self]
   554         c = self
   555         while visit:
   555         while True:
   556             parents = visit.pop(0).parents()
   556             for parent in c.parents():
   557             if len(parents) > 1 and parents[1].rev() > parents[0].rev():
   557                 visit[(parent.rev(), parent.node())] = parent
   558                 # make sure we return ancestors in reverse revision order
   558             if not visit:
   559                 parents = reversed(parents)
   559                 break
   560             for parent in parents:
   560             c = visit.pop(max(visit))
   561                 s = str(parent)
   561             yield c
   562                 if s not in seen:
       
   563                     visit.append(parent)
       
   564                     seen.add(s)
       
   565                     yield parent
       
   566 
   562 
   567 class workingctx(changectx):
   563 class workingctx(changectx):
   568     """A workingctx object makes access to data related to
   564     """A workingctx object makes access to data related to
   569     the current working directory convenient.
   565     the current working directory convenient.
   570     date - any valid date string or (unixtime, offset), or None.
   566     date - any valid date string or (unixtime, offset), or None.