Index: recipe_engine/autoroll_impl/commit_list.py |
diff --git a/recipe_engine/autoroll_impl/commit_list.py b/recipe_engine/autoroll_impl/commit_list.py |
index 189159ddd6cb8a5ce6d710429af04131e58fc1f0..f5eff8fa3a9f913a5463fd6299540ca8dbe0d370 100644 |
--- a/recipe_engine/autoroll_impl/commit_list.py |
+++ b/recipe_engine/autoroll_impl/commit_list.py |
@@ -24,6 +24,7 @@ class CommitList(object): |
assert all(isinstance(c, CommitMetadata) for c in commit_list) |
self._commits = list(commit_list) |
self._cur_idx = 0 |
+ self._next_roll_candidate_idx = None |
# This maps from commit hash -> index in _commits. |
self._rev_idx = {} |
@@ -69,6 +70,28 @@ class CommitList(object): |
return None |
return self._commits[nxt_idx] |
+ @property |
+ def next_roll_candidate(self): |
+ """Gets the next CommitMetadata and distance with roll_candidate==True |
+ without advancing the current index. |
+ |
+ Returns (CommitMetadata, <distance>), or (None, None) if there is no next |
+ roll_candidate. |
+ """ |
+ # Compute and cache the next roll candidate index. |
+ nxt_idx = self._next_roll_candidate_idx |
+ if nxt_idx is None or nxt_idx <= self._cur_idx: |
+ nxt_idx = None |
+ for i, commit in enumerate(self._commits[self._cur_idx+1:]): |
+ if commit.roll_candidate: |
+ nxt_idx = self._cur_idx + i + 1 |
+ break |
+ self._next_roll_candidate_idx = nxt_idx |
+ |
+ if nxt_idx is not None: |
+ return self._commits[nxt_idx], nxt_idx - self._cur_idx |
+ return (None, None) |
+ |
def advance(self): |
"""Advances the current CommitMetadata by one. |