#!/usr/bin/python3 import argparse import logging import pathlib import sys import osc.core from lib.exporter import Exporter from lib.importer import Importer URL_OBS = "https://api.opensuse.org" URL_IBS = "https://api.suse.de" # The order is relevant (from older to newer initial codebase) PROJECTS = [ ("openSUSE:Factory", "factory", URL_OBS), # ("SUSE:SLE-12:GA", "SLE_12", URL_IBS), # ("SUSE:SLE-12:Update", "SLE_12", URL_IBS), # ("SUSE:SLE-12-SP1:GA", "SLE_12_SP1", URL_IBS), # ("SUSE:SLE-12-SP1:Update", "SLE_12_SP1", URL_IBS), # ("SUSE:SLE-12-SP2:GA", "SLE_12_SP2", URL_IBS), # ("SUSE:SLE-12-SP2:Update", "SLE_12_SP2", URL_IBS), # ("SUSE:SLE-12-SP3:GA", "SLE_12_SP3", URL_IBS), # ("SUSE:SLE-12-SP3:Update", "SLE_12_SP3", URL_IBS), # ("SUSE:SLE-12-SP4:GA", "SLE_12_SP4", URL_IBS), # ("SUSE:SLE-12-SP4:Update", "SLE_12_SP4", URL_IBS), # ("SUSE:SLE-12-SP5:GA", "SLE_12_SP5", URL_IBS), # ("SUSE:SLE-12-SP5:Update", "SLE_12_SP5", URL_IBS), # ("SUSE:SLE-15:GA", "SLE_15", URL_IBS), # ("SUSE:SLE-15:Update", "SLE_15", URL_IBS), # ("SUSE:SLE-15-SP1:GA", "SLE_15_SP1", URL_IBS), # ("SUSE:SLE-15-SP1:Update", "SLE_15_SP1", URL_IBS), # ("SUSE:SLE-15-SP2:GA", "SLE_15_SP2", URL_IBS), # ("SUSE:SLE-15-SP2:Update", "SLE_15_SP2", URL_IBS), # ("SUSE:SLE-15-SP3:GA", "SLE_15_SP3", URL_IBS), # ("SUSE:SLE-15-SP3:Update", "SLE_15_SP3", URL_IBS), # ("SUSE:SLE-15-SP4:GA", "SLE_15_SP4", URL_IBS), # ("SUSE:SLE-15-SP4:Update", "SLE_15_SP4", URL_IBS), ] def main(): parser = argparse.ArgumentParser(description="OBS history importer into git") parser.add_argument("package", help="OBS package name") parser.add_argument( "-r", "--repodir", required=False, type=pathlib.Path, help="Local git repository directory", ) parser.add_argument( "-g", "--gc", metavar="N", type=int, default=200, help="Garbage recollect and pack the git history each N commits", ) parser.add_argument( "--level", "-l", default="INFO", help="logging level", ) parser.add_argument( "--export", action="store_true", help="Export database fields for the given package as YAML", ) args = parser.parse_args() if args.level: numeric_level = getattr(logging, args.level.upper(), None) if not isinstance(numeric_level, int): print(f"Invalid log level: {args.level}") sys.exit(-1) logging.basicConfig(level=numeric_level) if numeric_level == logging.DEBUG: osc.conf.config["debug"] = True requests_log = logging.getLogger("requests.packages.urllib3") requests_log.setLevel(logging.DEBUG) requests_log.propagate = True if args.export: Exporter(args.package).run() return if not args.repodir: args.repodir = pathlib.Path(args.package) # TODO: use a CLI parameter to describe the projects importer = Importer(PROJECTS, args.package, args.repodir) importer.set_gc_interval(args.gc) importer.import_into_db() importer.export_as_git() if __name__ == "__main__": main()