Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 25 additions & 2 deletions koji-bootstrap.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,22 @@ def import_build(self, nvr, epoch, opts):
workdir = os.path.join(opts.workdir, nvr) # store it under $workdir/$build
shutil.rmtree(workdir, ignore_errors=True)
os.makedirs(workdir)
self.pool.log_info("Downloading nvr %s from koji-profile %s" % (nvr, opts.koji_profile))
ret, out = kobo.shortcuts.run("koji --profile '%s' download-build %s" % (opts.koji_profile, nvr), workdir=workdir)
if opts.koji_secondary_profile:
for prof in opts.koji_secondary_profile:
try:
self.pool.log_info("Downloading nvr %s from secondary koji-profile %s" % (nvr, prof))
ret, out = kobo.shortcuts.run("koji --profile '%s' download-build %s" % (prof, nvr), workdir=workdir)
except RuntimeError:
self.pool.log_warning("Failed to import nvr %s from secondary koji-profile %s" % (nvr, prof))

for rpm in glob.glob("%s/*" % workdir):
self.pool.log_debug("Importing rpm %s" % rpm)
nvra = os.path.basename(rpm).replace(".rpm","")
if opts.skip_arch and kobo.rpmlib.parse_nvra(nvra)['arch'] in opts.skip_arch:
self.pool.log_debug("Skipping import of nvra %s since arch is in options.skip_arch=%s" % (nvra, opts.skip_arch))
continue
ret, out = kobo.shortcuts.run("koji --profile '%s' import --create-build --src-epoch '%s' %s" % (opts.koji_dest_profile, epoch, rpm))
self.pool.log_debug("Removing workdir %s" % workdir)

Expand Down Expand Up @@ -86,6 +98,10 @@ def handle_pretty_print_nvrs(opts):
for item in get_nvrs(opts.builds_from_file):
print (item)

def handle_pretty_print_pkgs(opts):
for item in get_nvrs(opts.builds_from_file):
print (kobo.rpmlib.parse_nvr(item)['name'])

def handle_missing_builds(opts):
nvrs = get_nvrs(opts.builds_from_file)
koji_session = get_koji_session(opts)
Expand Down Expand Up @@ -121,7 +137,9 @@ def handle_import_builds(opts):
parser.add_option("--find-missing-builds", help="Checks whether builds are present in given koji instance",
action="store_const", const="missing", dest="action")
parser.add_option("--print-builds", help="Prints builds in a koji-compat format",
action="store_const", const="print", dest="action")
action="store_const", const="nvrs", dest="action")
parser.add_option("--print-packages", help="Prints package names not nvrs",
action="store_const", const="pkgs", dest="action")
parser.add_option("--import-builds", help="Import builds",
action="store_const", const="import", dest="action")
parser.add_option("--import-threads",
Expand All @@ -133,6 +151,8 @@ def handle_import_builds(opts):

parser.add_option("--koji-profile", default="koji")
parser.add_option("--koji-dest-profile", default="koji", help="profile of Koji import-target")
parser.add_option("--koji-secondary-profile", action="append", help="Aditional profile(s) to get builds from")
parser.add_option("--skip-arch", action="append", help="Skip import of given architecture(s)")
parser.add_option("--workdir", help="This is required for import of builds", default="/tmp/import")
parser.add_option("--debug", action="store_true", help="Print debug info such as individual rpm imports")
opts, args = parser.parse_args()
Expand All @@ -150,8 +170,11 @@ def handle_import_builds(opts):
logger.setLevel(logging.DEBUG)


if opts.action == "print":
if opts.action == "nvrs":
handle_pretty_print_nvrs(opts)

if opts.action == "pkgs":
handle_pretty_print_pkgs(opts)

elif opts.action == "missing":
handle_missing_builds(opts)
Expand Down