Skip to content

Commit

Permalink
Merge pull request mozilla#272 from adusca/find_backfill_revlist
Browse files Browse the repository at this point in the history
Add find_backfill_revlist which finds a list of revisions to backfill.
  • Loading branch information
armenzg committed Jul 7, 2015
2 parents edbe8a2 + 89a7b18 commit d813af4
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 33 deletions.
14 changes: 12 additions & 2 deletions mozci/mozci.py
Original file line number Diff line number Diff line change
Expand Up @@ -443,9 +443,9 @@ def trigger(builder, revision, files=[], dry_run=False, extra_properties=None):
extra_properties)


def backfill_revlist(buildername, revisions):
def _filter_backfill_revlist(buildername, revisions):
"""
Find the last known good job for that buildername iterating through the list of revisions.
Helper function to find the last known good job for a given buildername on a list of revisions.
If a good job is found, we will only trigger_range() up to that revision instead of the
complete list (subset of *revlist*).
Expand All @@ -471,3 +471,13 @@ def backfill_revlist(buildername, revisions):

LOG.info("We only need to backfill %s" % new_revisions_list)
return new_revisions_list


def find_backfill_revlist(repo_url, revision, max_revisions, buildername):
"""Determine which revisions we need to trigger in order to backfill."""
revlist = pushlog.query_revisions_range_from_revision_before_and_after(
repo_url=repo_url,
revision=revision,
before=max_revisions - 1,
after=0)
return _filter_backfill_revlist(buildername, revlist)
42 changes: 18 additions & 24 deletions mozci/scripts/trigger.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@

from argparse import ArgumentParser

from mozci.mozci import backfill_revlist, trigger_range, set_query_source,\
from mozci.mozci import find_backfill_revlist, trigger_range, set_query_source,\
query_repo_name_from_buildername, query_repo_url_from_buildername, query_builders
from mozci.sources.buildapi import make_retrigger_request
from mozci.query_jobs import BuildApi, COALESCED
from mozci.sources.pushlog import query_revisions_range_from_revision_and_delta
from mozci.sources.pushlog import query_revisions_range, query_revision_info, query_pushid_range
from mozci.sources.pushlog import query_revisions_range, \
query_revisions_range_from_revision_before_and_after
from mozci.utils.misc import setup_logging
from mozci.sources.pushlog import query_repo_tip

Expand Down Expand Up @@ -152,18 +152,18 @@ def determine_revlist(repo_url, buildername, rev, back_revisions,
delta, from_rev, backfill, skips, max_revisions):
"""Determine which revisions we need to trigger."""
if back_revisions:
push_info = query_revision_info(repo_url, rev)
end_id = int(push_info["pushid"]) # newest revision
start_id = end_id - back_revisions
revlist = query_pushid_range(repo_url=repo_url,
start_id=start_id,
end_id=end_id)
revlist = query_revisions_range_from_revision_before_and_after(
repo_url=repo_url,
revision=rev,
before=back_revisions,
after=0)

elif delta:
revlist = query_revisions_range_from_revision_and_delta(
repo_url,
rev,
delta)
revlist = query_revisions_range_from_revision_before_and_after(
repo_url=repo_url,
revision=rev,
before=delta,
after=delta)

elif from_rev:
revlist = query_revisions_range(
Expand All @@ -172,17 +172,11 @@ def determine_revlist(repo_url, buildername, rev, back_revisions,
from_revision=from_rev)

elif backfill:
push_info = query_revision_info(repo_url, rev)
# A known bad revision
end_id = int(push_info["pushid"]) # newest revision
# The furthest we will go to find the last good job
# We might find a good job before that
start_id = end_id - max_revisions + 1
revlist = query_pushid_range(repo_url=repo_url,
start_id=start_id,
end_id=end_id)

revlist = backfill_revlist(buildername, revlist)
revlist = find_backfill_revlist(
repo_url=repo_url,
revision=rev,
max_revisions=max_revisions,
buildername=buildername)

else:
revlist = [rev]
Expand Down
11 changes: 4 additions & 7 deletions mozci/sources/pushlog.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,16 +88,13 @@ def query_pushid_range(repo_url, start_id, end_id, version=2):
return revisions


def query_revisions_range_from_revision_and_delta(repo_url, revision, delta):
"""
Function to get the start revision and end revision
based on given delta for the given push_revision.
"""
def query_revisions_range_from_revision_before_and_after(repo_url, revision, before, after):
"""Get the start and end revisions based on the number of revisions before and after."""
try:
push_info = query_revision_info(repo_url, revision)
pushid = int(push_info["pushid"])
start_id = pushid - delta
end_id = pushid + delta
start_id = pushid - before
end_id = pushid + after
revlist = query_pushid_range(repo_url, start_id, end_id)
except:
raise Exception('Unable to retrieve pushlog data. '
Expand Down

0 comments on commit d813af4

Please sign in to comment.