diff --git a/git-importer.py b/git-importer.py index 8373358..410ef4c 100755 --- a/git-importer.py +++ b/git-importer.py @@ -42,11 +42,16 @@ PROJECTS = [ ] -def export_package(project, package, repodir, cachedir, gc): +def export_package(project, package, repodir, cachedir, gc, importer:Importer): + print(f"exporting {project}/{package} to {repodir}") exporter = GitExporter(URL_OBS, project, package, repodir, cachedir) exporter.set_gc_interval(gc) - exporter.export_as_git() - + if not exporter.export_as_git(): + link = importer.find_linked_package(project, package) + if link is not None: + (project, package) = link + print(f" -> {project}/{package}") + export_package(project, package, repodir, cachedir, gc, importer) def main(): parser = argparse.ArgumentParser(description="OBS history importer into git") @@ -120,7 +125,7 @@ def main(): importer.import_into_db() for package in args.packages: if not importer.package_with_scmsync(args.project, package): - export_package(args.project, package, args.repodir, args.cachedir, args.gc) + export_package(args.project, package, args.repodir, args.cachedir, args.gc, importer) else: logging.debug(f"{args.project}/{package} has scmsync links - skipping export") diff --git a/lib/git_exporter.py b/lib/git_exporter.py index d8ff581..fc046a1 100644 --- a/lib/git_exporter.py +++ b/lib/git_exporter.py @@ -135,7 +135,8 @@ class GitExporter: added_commits = False if tree == None: # eg. python-M2Crypto errors - return + # fall-back to linked project + return False flats = tree.as_flat_list() branch_state = {"factory": None, "devel": None} left_to_commit = self.check_repo_state(flats, branch_state, "factory") @@ -186,6 +187,7 @@ class GitExporter: #if added_commits: # self.git.push(force=True) + return True def run_gc(self): self.gc_cnt = self.gc_interval diff --git a/lib/importer.py b/lib/importer.py index 455f038..369d7c4 100644 --- a/lib/importer.py +++ b/lib/importer.py @@ -79,6 +79,18 @@ class Importer: (rev.dbid, linked_rev.dbid), ) + def find_linked_package(self, project, package) -> (tuple[str,str]|None): + with self.db.cursor() as cur: + cur.execute( + """SELECT DISTINCT l.project, l.package from links l JOIN revisions r + on r.id=l.revision_id WHERE r.project=%s AND r.package=%s""", + (project, package), + ) + row = cur.fetchone() + if row is not None: + return row + return None + def fetch_all_linked_packages(self, project, package): with self.db.cursor() as cur: cur.execute(