Merge lp:~wgrant/loggerhead/fix-merge-point-recursion into lp:loggerhead

Proposed by William Grant
Status: Merged
Merged at revision: 490
Proposed branch: lp:~wgrant/loggerhead/fix-merge-point-recursion
Merge into: lp:loggerhead
Diff against target: 35 lines (+4/-14)
1 file modified
loggerhead/history.py (+4/-14)
To merge this branch: bzr merge lp:~wgrant/loggerhead/fix-merge-point-recursion
Reviewer Review Type Date Requested Status
Colin Watson (community) Approve
Review via email: mp+290395@code.launchpad.net

Commit message

Rework get_merge_point_list to iterate rather than recurse.

Description of the change

Rework get_merge_point_list to iterate rather than recurse.

Fixes "maximum recursion depth exceeded" exceptions on exceptionally
deep and exceedingly recursive histories.

To post a comment you must log in.
490. By William Grant

Rework get_merge_point_list to iterate rather than recurse.

Fixes "maximum recursion depth exceeded" exceptions on exceptionally
deep and exceedingly recursive histories.

Revision history for this message
Colin Watson (cjwatson) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'loggerhead/history.py'
--- loggerhead/history.py 2012-02-08 01:50:02 +0000
+++ loggerhead/history.py 2016-03-30 06:19:19 +0000
@@ -591,27 +591,17 @@
591 return []591 return []
592592
593 merge_point = []593 merge_point = []
594 while True:594 nexts = [revid]
595 while nexts:
596 revid = nexts.pop()
595 children = self._rev_info[self._rev_indices[revid]][1]597 children = self._rev_info[self._rev_indices[revid]][1]
596 nexts = []
597 for child in children:598 for child in children:
598 child_parents = self._rev_info[self._rev_indices[child]][2]599 child_parents = self._rev_info[self._rev_indices[child]][2]
599 if child_parents[0] == revid:600 if child_parents[0] == revid:
600 nexts.append(child)601 nexts.append(child)
601 else:602 else:
602 merge_point.append(child)603 merge_point.append(child)
603604 return merge_point
604 if len(nexts) == 0:
605 # only merge
606 return merge_point
607
608 while len(nexts) > 1:
609 # branch
610 next = nexts.pop()
611 merge_point_next = self.get_merge_point_list(next)
612 merge_point.extend(merge_point_next)
613
614 revid = nexts[0]
615605
616 def simplify_merge_point_list(self, revids):606 def simplify_merge_point_list(self, revids):
617 """if a revision is already merged, don't show further merge points"""607 """if a revision is already merged, don't show further merge points"""

Subscribers

People subscribed via source and target branches