Chromium Code Reviews| 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. |