Changes to one file · Browse files at ec50052c65f6 Showing diff from parent c7c54e8b4386 Diff from another changeset...
@@ -706,11 +706,25 @@
def ack(self, sha):
"""Ack that a revision and its ancestors are present in the source."""
- if sha in self.heads:
- self.heads.remove(sha)
- if sha in self.parents:
- for p in self.parents[sha]:
- self.ack(p)
+ ancestors = set([sha])
+
+ # stop if we run out of heads to remove
+ while self.heads:
+ for a in ancestors:
+ if a in self.heads:
+ self.heads.remove(a)
+
+ # collect all ancestors
+ new_ancestors = set()
+ for a in ancestors:
+ if a in self.parents:
+ new_ancestors.update(self.parents[a])
+
+ # no more ancestors; stop
+ if not new_ancestors:
+ break
+
+ ancestors = new_ancestors
def next(self):
"""Iterate over ancestors of heads in the target."""
|
Loading...