summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/reproducible_remote_scheduler.py57
1 files changed, 33 insertions, 24 deletions
diff --git a/bin/reproducible_remote_scheduler.py b/bin/reproducible_remote_scheduler.py
index 09390b95..ec983f37 100755
--- a/bin/reproducible_remote_scheduler.py
+++ b/bin/reproducible_remote_scheduler.py
@@ -13,6 +13,36 @@ import time
import argparse
from sqlalchemy import sql
+def packages_matching_criteria(arch, suite, criteria):
+ "Return a list of packages in (SUITE, ARCH) matching the given CRITERIA."
+ issue, status, built_after, built_before = criteria
+ del criteria
+
+ formatter = dict(suite=suite, arch=arch, notes_table='')
+ log.info('Querying packages with given issues/status...')
+ query = "SELECT s.name " + \
+ "FROM sources AS s, {notes_table} results AS r " + \
+ "WHERE r.package_id=s.id " + \
+ "AND s.architecture= '{arch}' " + \
+ "AND s.suite = '{suite}' AND r.status != 'blacklisted' "
+ if issue:
+ query += "AND n.package_id=s.id AND n.issues LIKE '%%{issue}%%' "
+ formatter['issue'] = issue
+ formatter['notes_table'] = "notes AS n,"
+ if status:
+ query += "AND r.status = '{status}'"
+ formatter['status'] = status
+ if built_after:
+ query += "AND r.build_date > '{built_after}' "
+ formatter['built_after'] = built_after
+ if built_before:
+ query += "AND r.build_date < '{built_before}' "
+ formatter['built_before'] = built_before
+ results = query_db(query.format_map(formatter))
+ results = [x for (x,) in results]
+ log.info('Selected packages: ' + ' '.join(results))
+ return results
+
def parse_known_args():
parser = argparse.ArgumentParser(
description='Reschedule packages to re-test their reproducibility',
@@ -119,32 +149,11 @@ def parse_known_args():
sys.exit(1)
if issue or status or built_after or built_before:
- formatter = dict(suite=suite, arch=arch, notes_table='')
- log.info('Querying packages with given issues/status...')
- query = "SELECT s.name " + \
- "FROM sources AS s, {notes_table} results AS r " + \
- "WHERE r.package_id=s.id " + \
- "AND s.architecture= '{arch}' " + \
- "AND s.suite = '{suite}' AND r.status != 'blacklisted' "
- if issue:
- query += "AND n.package_id=s.id AND n.issues LIKE '%%{issue}%%' "
- formatter['issue'] = issue
- formatter['notes_table'] = "notes AS n,"
- if status:
- query += "AND r.status = '{status}'"
- formatter['status'] = status
- if built_after:
- query += "AND r.build_date > '{built_after}' "
- formatter['built_after'] = built_after
- if built_before:
- query += "AND r.build_date < '{built_before}' "
- formatter['built_before'] = built_before
- results = query_db(query.format_map(formatter))
- results = [x for (x,) in results]
- log.info('Selected packages: ' + ' '.join(results))
# Note: this .extend() operation modifies scheduling_args.packages, which
# is used by rest()
- packages.extend(results)
+ packages.extend(
+ packages_matching_criteria(arch, suite, (issue, status, built_after, built_before)
+ )
if len(packages) > 50 and notify:
log.critical(bcolors.RED + bcolors.BOLD)