forked from importers/git-importer
Follow links during exports
If package is linked, we need to follow the link and export the linked package instead.
This commit is contained in:
@@ -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")
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user