| 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.
|
|
|
|
|