import argparse import json import logging from app import app from data import model from data.database import RepositoryBuildTrigger, configure from data.model.build import update_build_trigger configure(app.config) logger = logging.getLogger(__name__) def run_branchregex_migration(): encountered = set() while True: found = list( RepositoryBuildTrigger.select().where( RepositoryBuildTrigger.config ** "%branch_regex%", ~(RepositoryBuildTrigger.config ** "%branchtag_regex%"), ) ) found = [f for f in found if not f.uuid in encountered] if not found: logger.debug("No additional records found") return logger.debug("Found %s records to be changed", len(found)) for trigger in found: encountered.add(trigger.uuid) try: config = json.loads(trigger.config) except: logging.error("Cannot parse config for trigger %s", trigger.uuid) continue logger.debug("Checking trigger %s", trigger.uuid) existing_regex = config["branch_regex"] logger.debug("Found branch regex '%s'", existing_regex) sub_regex = existing_regex.split("|") new_regex = "|".join(["heads/" + sub for sub in sub_regex]) config["branchtag_regex"] = new_regex logger.debug("Updating to branchtag regex '%s'", new_regex) update_build_trigger(trigger, config) if __name__ == "__main__": logging.basicConfig(level=logging.DEBUG) logging.getLogger("boto").setLevel(logging.CRITICAL) run_branchregex_migration()