let merge repos deal with it
This commit is contained in:
parent
95591103ca
commit
3a5dd71686
1 changed files with 26 additions and 4 deletions
|
|
@ -5098,30 +5098,52 @@ class CreaterepoTask(BaseTaskHandler):
|
||||||
% parseStatus(status, ' '.join(cmd)))
|
% parseStatus(status, ' '.join(cmd)))
|
||||||
|
|
||||||
def merge_repos(self, external_repos, arch, groupdata):
|
def merge_repos(self, external_repos, arch, groupdata):
|
||||||
repos = []
|
# group repos by merge type
|
||||||
|
repos_by_mode = {}
|
||||||
|
for repo in external_repos:
|
||||||
|
repos_by_mode.setdefault(
|
||||||
|
repo.get('merge_mode', 'koji'), []).append(repo)
|
||||||
|
|
||||||
|
# figure out merge mode
|
||||||
|
if len(repos_by_mode) > 1:
|
||||||
|
# TODO: eventually support mixing merge modes
|
||||||
|
raise koji.GenericError('Found multiple merge modes for external '
|
||||||
|
'repos: %s\n' % repos_by_mode.keys())
|
||||||
|
merge_mode = repos_by_mode.keys()[0]
|
||||||
|
|
||||||
|
# move current repo to the premerge location
|
||||||
localdir = '%s/repo_%s_premerge' % (self.workdir, self.repo_id)
|
localdir = '%s/repo_%s_premerge' % (self.workdir, self.repo_id)
|
||||||
os.rename(self.outdir, localdir)
|
os.rename(self.outdir, localdir)
|
||||||
koji.ensuredir(self.outdir)
|
koji.ensuredir(self.outdir)
|
||||||
repos.append('file://' + localdir + '/')
|
|
||||||
|
|
||||||
|
# generate repo url list, starting with our local premerge repo
|
||||||
|
repos = ['file://' + localdir + '/']
|
||||||
for repo in external_repos:
|
for repo in external_repos:
|
||||||
ext_url = repo['url']
|
ext_url = repo['url']
|
||||||
# substitute $arch in the url with the arch of the repo we're generating
|
# substitute $arch in the url with the arch of the repo we're generating
|
||||||
ext_url = ext_url.replace('$arch', arch)
|
ext_url = ext_url.replace('$arch', arch)
|
||||||
repos.append(ext_url)
|
repos.append(ext_url)
|
||||||
|
|
||||||
blocklist = self.repodir + '/blocklist'
|
# construct command
|
||||||
if self.options.use_createrepo_c:
|
if merge_mode == 'simple':
|
||||||
|
# currently only supported by our own mergerepos script
|
||||||
|
# (we need it to write pkgorigins)
|
||||||
|
cmd = ['/usr/libexec/kojid/mergerepos',
|
||||||
|
'--simple',
|
||||||
|
'--tempdir', self.workdir]
|
||||||
|
elif self.options.use_createrepo_c:
|
||||||
cmd = ['/usr/bin/mergerepo_c', '--koji']
|
cmd = ['/usr/bin/mergerepo_c', '--koji']
|
||||||
else:
|
else:
|
||||||
cmd = ['/usr/libexec/kojid/mergerepos']
|
cmd = ['/usr/libexec/kojid/mergerepos']
|
||||||
cmd.extend(['--tempdir', self.workdir])
|
cmd.extend(['--tempdir', self.workdir])
|
||||||
|
blocklist = self.repodir + '/blocklist'
|
||||||
cmd.extend(['-a', arch, '-b', blocklist, '-o', self.outdir])
|
cmd.extend(['-a', arch, '-b', blocklist, '-o', self.outdir])
|
||||||
if os.path.isfile(groupdata):
|
if os.path.isfile(groupdata):
|
||||||
cmd.extend(['-g', groupdata])
|
cmd.extend(['-g', groupdata])
|
||||||
for repo in repos:
|
for repo in repos:
|
||||||
cmd.extend(['-r', repo])
|
cmd.extend(['-r', repo])
|
||||||
|
|
||||||
|
# run command
|
||||||
logfile = '%s/mergerepos.log' % self.workdir
|
logfile = '%s/mergerepos.log' % self.workdir
|
||||||
status = log_output(self.session, cmd[0], cmd, logfile, self.getUploadDir(), logerror=True)
|
status = log_output(self.session, cmd[0], cmd, logfile, self.getUploadDir(), logerror=True)
|
||||||
if not isSuccess(status):
|
if not isSuccess(status):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue