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 = GitExporter(URL_OBS, project, package, repodir, cachedir)
|
||||||
exporter.set_gc_interval(gc)
|
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():
|
def main():
|
||||||
parser = argparse.ArgumentParser(description="OBS history importer into git")
|
parser = argparse.ArgumentParser(description="OBS history importer into git")
|
||||||
@@ -120,7 +125,7 @@ def main():
|
|||||||
importer.import_into_db()
|
importer.import_into_db()
|
||||||
for package in args.packages:
|
for package in args.packages:
|
||||||
if not importer.package_with_scmsync(args.project, package):
|
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:
|
else:
|
||||||
logging.debug(f"{args.project}/{package} has scmsync links - skipping export")
|
logging.debug(f"{args.project}/{package} has scmsync links - skipping export")
|
||||||
|
|
||||||
|
|||||||
@@ -135,7 +135,8 @@ class GitExporter:
|
|||||||
added_commits = False
|
added_commits = False
|
||||||
|
|
||||||
if tree == None: # eg. python-M2Crypto errors
|
if tree == None: # eg. python-M2Crypto errors
|
||||||
return
|
# fall-back to linked project
|
||||||
|
return False
|
||||||
flats = tree.as_flat_list()
|
flats = tree.as_flat_list()
|
||||||
branch_state = {"factory": None, "devel": None}
|
branch_state = {"factory": None, "devel": None}
|
||||||
left_to_commit = self.check_repo_state(flats, branch_state, "factory")
|
left_to_commit = self.check_repo_state(flats, branch_state, "factory")
|
||||||
@@ -186,6 +187,7 @@ class GitExporter:
|
|||||||
|
|
||||||
#if added_commits:
|
#if added_commits:
|
||||||
# self.git.push(force=True)
|
# self.git.push(force=True)
|
||||||
|
return True
|
||||||
|
|
||||||
def run_gc(self):
|
def run_gc(self):
|
||||||
self.gc_cnt = self.gc_interval
|
self.gc_cnt = self.gc_interval
|
||||||
|
|||||||
@@ -79,6 +79,18 @@ class Importer:
|
|||||||
(rev.dbid, linked_rev.dbid),
|
(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):
|
def fetch_all_linked_packages(self, project, package):
|
||||||
with self.db.cursor() as cur:
|
with self.db.cursor() as cur:
|
||||||
cur.execute(
|
cur.execute(
|
||||||
|
|||||||
Reference in New Issue
Block a user