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..664787a817ef781096265f96995592f3543b18bc 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,25 @@ 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. |
+ """ |
+ nxt_idx = self._next_roll_candidate_idx |
dnj
2017/04/20 18:16:21
"nxt_idx" always == self._next_roll_candidate_idx.
iannucci
2017/04/20 21:53:20
Done.
|
+ if nxt_idx is None or nxt_idx <= self._cur_idx: |
+ nxt_idx = self._next_roll_candidate_idx = None |
+ for i, commit in enumerate(self._commits[self._cur_idx+1:]): |
+ if commit.roll_candidate: |
+ nxt_idx = self._next_roll_candidate_idx = self._cur_idx + i + 1 |
+ break |
+ 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. |