implement --delta-rpms
This commit is contained in:
parent
43da89749f
commit
77bdd1e239
3 changed files with 41 additions and 13 deletions
|
|
@ -4783,8 +4783,9 @@ class NewRepoTask(BaseTaskHandler):
|
|||
else:
|
||||
oldrepo = self.session.getRepo(tinfo['id'], state=koji.REPO_READY)
|
||||
subtasks = {}
|
||||
opts = {'do_external': True, 'deltas': False}
|
||||
for arch in arches:
|
||||
arglist = [repo_id, arch, oldrepo]
|
||||
arglist = [repo_id, arch, oldrepo, opts]
|
||||
subtasks[arch] = self.session.host.subtask(method='createrepo',
|
||||
arglist=arglist,
|
||||
label=arch,
|
||||
|
|
@ -4815,7 +4816,7 @@ class CreaterepoTask(BaseTaskHandler):
|
|||
def getRepoPath(self, repo_id, tag):
|
||||
return self.pathinfo.repo(repo_id, tag)
|
||||
|
||||
def handler(self, repo_id, arch, oldrepo, do_external):
|
||||
def handler(self, repo_id, arch, oldrepo, opts):
|
||||
#arch is the arch of the repo, not the task
|
||||
rinfo = self.session.repoInfo(repo_id, strict=True)
|
||||
if rinfo['state'] != koji.REPO_INIT:
|
||||
|
|
@ -4833,11 +4834,13 @@ class CreaterepoTask(BaseTaskHandler):
|
|||
pkglist = os.path.join(self.repodir, 'pkglist')
|
||||
if os.path.getsize(pkglist) == 0:
|
||||
pkglist = None
|
||||
self.create_local_repo(rinfo, arch, pkglist, groupdata, oldrepo)
|
||||
|
||||
external_repos = self.session.getExternalRepoList(rinfo['tag_id'], event=rinfo['create_event'])
|
||||
if external_repos and do_external:
|
||||
self.merge_repos(external_repos, arch, groupdata)
|
||||
self.create_local_repo(rinfo, arch, pkglist, groupdata, oldrepo,
|
||||
opts['deltas'])
|
||||
if opts['do_external']:
|
||||
external_repos = self.session.getExternalRepoList(
|
||||
rinfo['tag_id'], event=rinfo['create_event'])
|
||||
if external_repos:
|
||||
self.merge_repos(external_repos, arch, groupdata)
|
||||
elif pkglist is None:
|
||||
fo = file(os.path.join(self.datadir, "EMPTY_REPO"), 'w')
|
||||
fo.write("This repo is empty because its tag has no content for this arch\n")
|
||||
|
|
@ -4848,10 +4851,14 @@ class CreaterepoTask(BaseTaskHandler):
|
|||
for f in os.listdir(self.datadir):
|
||||
files.append(f)
|
||||
self.session.uploadWrapper('%s/%s' % (self.datadir, f), uploadpath, f)
|
||||
|
||||
if opts['deltas']:
|
||||
ddir = os.path.join(self.outdir, 'drpms')
|
||||
for f in os.listdir(ddir):
|
||||
files.append(f)
|
||||
self.session.uploadWrapper('%s/%s' % (ddir, f), uploadpath, f)
|
||||
return [uploadpath, files]
|
||||
|
||||
def create_local_repo(self, rinfo, arch, pkglist, groupdata, oldrepo):
|
||||
def create_local_repo(self, rinfo, arch, pkglist, groupdata, oldrepo, drpms):
|
||||
koji.ensuredir(self.outdir)
|
||||
if self.options.use_createrepo_c:
|
||||
cmd = ['/usr/bin/createrepo_c']
|
||||
|
|
@ -4863,7 +4870,9 @@ class CreaterepoTask(BaseTaskHandler):
|
|||
if os.path.isfile(groupdata):
|
||||
cmd.extend(['-g', groupdata])
|
||||
#attempt to recycle repodata from last repo
|
||||
if pkglist and oldrepo and self.options.createrepo_update:
|
||||
if pkglist and oldrepo and self.options.createrepo_update and not drpms:
|
||||
# signed repos overload the use of "oldrepo", so the conditional
|
||||
# explicitly make sure this does not get executed with that on
|
||||
oldpath = self.pathinfo.repo(oldrepo['id'], rinfo['tag_name'])
|
||||
olddatadir = '%s/%s/repodata' % (oldpath, arch)
|
||||
if not os.path.isdir(olddatadir):
|
||||
|
|
@ -4878,6 +4887,11 @@ class CreaterepoTask(BaseTaskHandler):
|
|||
cmd.append('--update')
|
||||
if self.options.createrepo_skip_stat:
|
||||
cmd.append('--skip-stat')
|
||||
if drpms:
|
||||
# generate delta-rpms
|
||||
cmd.append('--deltas')
|
||||
for repo in oldrepo:
|
||||
cmd.extend(['--oldpackagedirs', repo])
|
||||
# note: we can't easily use a cachedir because we do not have write
|
||||
# permission. The good news is that with --update we won't need to
|
||||
# be scanning many rpms.
|
||||
|
|
@ -4938,8 +4952,15 @@ class NewSignedRepoTask(BaseTaskHandler):
|
|||
if os.path.isfile("%s/%s/pkglist" % (path, fn)):
|
||||
arches.append(fn)
|
||||
subtasks = {}
|
||||
if task_opts['delta']:
|
||||
make_drpms = True
|
||||
oldrepo = task_opts['delta']
|
||||
else:
|
||||
make_drpms = False
|
||||
oldrepo = None
|
||||
for arch in arches:
|
||||
arglist = [repo_id, arch, None, False] # no old repo or external
|
||||
opts = {'do_external': False, 'deltas': make_drpms}
|
||||
arglist = [repo_id, arch, oldrepo, opts]
|
||||
subtasks[arch] = self.session.host.subtask(
|
||||
method='createsignedrepo', arglist=arglist, label=arch,
|
||||
parent=self.id, arch='noarch')
|
||||
|
|
|
|||
5
cli/koji
5
cli/koji
|
|
@ -7085,6 +7085,9 @@ def handle_signed_repo(options, session, args):
|
|||
help=_("Indicate an architecture to consider. The default is all " +
|
||||
"architectures associated with the given tag. This option may " +
|
||||
"be specified multiple times."))
|
||||
parser.add_option('--delta-rpms', metavar='PATH',default=[],
|
||||
action='append',
|
||||
help=_('Create delta-rpms. PATH points to (older) rpms to generate against. May be specified multiple times.'))
|
||||
parser.add_option('--event', type='int',
|
||||
help=_('create a signed repository based on a Brew event'))
|
||||
parser.add_option('--multilib', action='store_true', default=False,
|
||||
|
|
@ -7093,7 +7096,6 @@ def handle_signed_repo(options, session, args):
|
|||
help=_('Do not consider tag inheritance'))
|
||||
# TODO: accept comps
|
||||
# TODO: latest?
|
||||
# TODO: delta-rpms ugh
|
||||
parser.add_option("--nowait", action='store_true', default=False,
|
||||
help=_('Do not wait for the task to complete'))
|
||||
parser.add_option('--skip-unsigned', action='store_true', default=False,
|
||||
|
|
@ -7125,6 +7127,7 @@ def handle_signed_repo(options, session, args):
|
|||
opts = {
|
||||
'arch': task_opts.arch,
|
||||
'event': task_opts.event,
|
||||
'delta': task_opts.delta_rpms,
|
||||
'multilib': task_opts.multilib,
|
||||
'inherit': not task_opts.noinherit,
|
||||
'skip': task_opts.skip_unsigned,
|
||||
|
|
|
|||
|
|
@ -12353,7 +12353,11 @@ class HostExports(object):
|
|||
koji.ensuredir(datadir)
|
||||
for fn in files:
|
||||
src = "%s/%s/%s" % (workdir, uploadpath, fn)
|
||||
dst = "%s/%s" % (datadir, fn)
|
||||
if fn.endswith('.drpm'):
|
||||
koji.ensuredir(os.path.join(archdir, 'drpms'))
|
||||
dst = "%s/drpms/%s" % (archdir, fn)
|
||||
else:
|
||||
dst = "%s/%s" % (datadir, fn)
|
||||
if not os.path.exists(src):
|
||||
raise koji.GenericError("uploaded file missing: %s" % src)
|
||||
safer_move(src, dst)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue