pkglistgen: Calculate the repos list instead of hardcoding
This commit is contained in:
parent
3efedd4096
commit
121cec768b
@ -72,7 +72,6 @@ logger = logging.getLogger()
|
||||
|
||||
SCRIPT_PATH = os.path.dirname(os.path.realpath(__file__))
|
||||
ARCHITECTURES = ['x86_64', 'ppc64le', 's390x', 'aarch64']
|
||||
DEFAULT_REPOS = ("openSUSE:Factory/standard")
|
||||
PRODUCT_SERVICE = '/usr/lib/obs/service/create_single_product'
|
||||
|
||||
|
||||
@ -414,7 +413,6 @@ class PkgListGen(ToolBase.ToolBase):
|
||||
|
||||
def __init__(self):
|
||||
ToolBase.ToolBase.__init__(self)
|
||||
self.repos = DEFAULT_REPOS
|
||||
# package -> supportatus
|
||||
self.packages = dict()
|
||||
self.default_support_status = 'l3'
|
||||
@ -528,6 +526,17 @@ class PkgListGen(ToolBase.ToolBase):
|
||||
for e in excludes:
|
||||
g.ignore(self.groups[e])
|
||||
|
||||
def expand_project_repo(self, project, repo, repos):
|
||||
repos.append([project, repo])
|
||||
url = makeurl(self.apiurl, ['source', project, '_meta'])
|
||||
meta = ET.parse(http_GET(url)).getroot()
|
||||
for path in meta.findall('.//repository[@name="{}"]/path'.format(repo)):
|
||||
self.expand_project_repo(path.get('project', project), path.get('repository'), repos)
|
||||
return repos
|
||||
|
||||
def expand_repos(self, project, repo):
|
||||
return self.expand_project_repo(project, repo, [])
|
||||
|
||||
def _check_supplements(self):
|
||||
tocheck = set()
|
||||
tocheck_locales = set()
|
||||
@ -568,8 +577,7 @@ class PkgListGen(ToolBase.ToolBase):
|
||||
self.lockjobs[arch] = []
|
||||
solvables = set()
|
||||
|
||||
for prp in self.repos:
|
||||
project, reponame = prp.split('/')
|
||||
for project, reponame in self.repos:
|
||||
repo = pool.add_repo(project)
|
||||
s = os.path.join(CACHEDIR, 'repo-{}-{}-{}.solv'.format(project, reponame, arch))
|
||||
r = repo.add_solv(s)
|
||||
@ -692,11 +700,10 @@ class CommandLineInterface(ToolBase.CommandLineInterface):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
ToolBase.CommandLineInterface.__init__(self, args, kwargs)
|
||||
self.repos = []
|
||||
|
||||
def get_optparser(self):
|
||||
parser = ToolBase.CommandLineInterface.get_optparser(self)
|
||||
parser.add_option('-r', '--repositories', dest='repos', metavar='REPOS', action='append',
|
||||
help='repositories to process (%s)' % DEFAULT_REPOS)
|
||||
parser.add_option('-i', '--input-dir', dest='input_dir', metavar='DIR',
|
||||
help='input directory', default='.')
|
||||
parser.add_option('-o', '--output-dir', dest='output_dir', metavar='DIR',
|
||||
@ -712,19 +719,11 @@ class CommandLineInterface(ToolBase.CommandLineInterface):
|
||||
tool.input_dir = self.options.input_dir
|
||||
tool.output_dir = self.options.output_dir
|
||||
tool.default_support_status = self.options.default_support_status
|
||||
tool.repos = self.repos
|
||||
if self.options.architectures:
|
||||
tool.architectures = self.options.architectures
|
||||
else:
|
||||
tool.architectures = ARCHITECTURES
|
||||
if self.options.repos:
|
||||
repos = []
|
||||
for r in self.options.repos:
|
||||
# handle comas as well, easier for shell script for now
|
||||
if ',' in r:
|
||||
repos += r.split(',')
|
||||
else:
|
||||
repos.append(r)
|
||||
tool.repos = repos
|
||||
return tool
|
||||
|
||||
def do_list(self, subcmd, opts):
|
||||
@ -769,8 +768,7 @@ class CommandLineInterface(ToolBase.CommandLineInterface):
|
||||
# only there to parse the repos
|
||||
bs_mirrorfull = os.path.join(SCRIPT_PATH, 'bs_mirrorfull')
|
||||
global_update = False
|
||||
for prp in self.tool.repos:
|
||||
project, repo = prp.split('/')
|
||||
for project, repo in self.repos:
|
||||
for arch in self.tool.architectures:
|
||||
# TODO: refactor to common function with repo_checker.py
|
||||
d = os.path.join(CACHEDIR, project, repo, arch)
|
||||
@ -804,8 +802,7 @@ class CommandLineInterface(ToolBase.CommandLineInterface):
|
||||
|
||||
def update_merge(self, nonfree):
|
||||
"""Merge free and nonfree solv files or copy free to merged"""
|
||||
for prp in self.tool.repos:
|
||||
project, repo = prp.split('/')
|
||||
for project, repo in self.repos:
|
||||
for arch in self.tool.architectures:
|
||||
solv_file = os.path.join(
|
||||
CACHEDIR, 'repo-{}-{}-{}.solv'.format(project, repo, arch))
|
||||
@ -840,8 +837,7 @@ class CommandLineInterface(ToolBase.CommandLineInterface):
|
||||
def do_create_sle_weakremovers(self, subcmd, opts, *prjs):
|
||||
for prj in prjs:
|
||||
logger.debug("processing %s", prj)
|
||||
self.options.repos = ['/'.join([prj, 'standard'])]
|
||||
self.postoptparse()
|
||||
self.expand_repos(prj, 'standard')
|
||||
opts.project = prj
|
||||
self.do_update('update', opts)
|
||||
|
||||
@ -853,7 +849,7 @@ class CommandLineInterface(ToolBase.CommandLineInterface):
|
||||
sysrepo = None
|
||||
for prp in prjs:
|
||||
fn = os.path.join(CACHEDIR, 'repo-{}-{}-{}.solv'.format(prp, 'standard', arch))
|
||||
r = pool.add_repo(prp)
|
||||
r = pool.add_repo('/'.join([prj, 'standard']))
|
||||
r.add_solv(fn)
|
||||
if not sysrepo:
|
||||
sysrepo = r
|
||||
@ -922,10 +918,9 @@ class CommandLineInterface(ToolBase.CommandLineInterface):
|
||||
pool = solv.Pool()
|
||||
pool.setarch(arch)
|
||||
|
||||
for prp in self.tool.repos:
|
||||
project, repo = prp.split('/')
|
||||
for project, repo in self.tool.repos:
|
||||
fn = os.path.join(CACHEDIR, 'repo-{}-{}-{}.solv'.format(project, repo, arch))
|
||||
r = pool.add_repo(prp)
|
||||
r = pool.add_repo()
|
||||
r.add_solv(fn)
|
||||
|
||||
sysrepo = pool.add_repo(os.path.basename(old).replace('.merged.solv', ''))
|
||||
@ -1185,33 +1180,26 @@ class CommandLineInterface(ToolBase.CommandLineInterface):
|
||||
main_repo = target_config['main-repo']
|
||||
|
||||
if opts.scope == 'target':
|
||||
self.options.repos = ['/'.join([target_project, main_repo])]
|
||||
self.repos = self.tool.expand_repos(target_project, main_repo)
|
||||
self.update_and_solve_target_wrapper(apiurl, target_project, target_config, main_repo, opts, drop_list=True)
|
||||
return self.error_occured
|
||||
elif opts.scope == 'ports':
|
||||
# TODO Continue supporting #1297, but should be abstracted.
|
||||
main_repo = 'ports'
|
||||
opts.project += ':Ports'
|
||||
self.options.repos = ['/'.join([opts.project, main_repo])]
|
||||
self.repos = self.tool.expand_repos(opts.project, main_repo)
|
||||
self.update_and_solve_target_wrapper(apiurl, target_project, target_config, main_repo, opts, drop_list=True)
|
||||
return self.error_occured
|
||||
elif opts.scope == 'rings':
|
||||
opts.project = api.rings[1]
|
||||
self.options.repos = [
|
||||
'/'.join([api.rings[1], main_repo]),
|
||||
'/'.join([api.rings[0], main_repo]),
|
||||
]
|
||||
self.repos = self.tool.expand_repos(api.rings[1], main_repo)
|
||||
self.update_and_solve_target_wrapper(apiurl, target_project, target_config, main_repo, opts)
|
||||
return self.error_occured
|
||||
elif opts.scope == 'staging':
|
||||
letters = api.get_staging_projects_short()
|
||||
for letter in letters:
|
||||
opts.project = api.prj_from_short(letter)
|
||||
self.options.repos = ['/'.join([opts.project, main_repo])]
|
||||
|
||||
if not api.is_staging_bootstrapped(opts.project):
|
||||
self.options.repos.append('/'.join([opts.project, 'bootstrap_copy']))
|
||||
|
||||
self.repos = self.tool.expand_repos(opts.project, main_repo)
|
||||
self.update_and_solve_target_wrapper(apiurl, target_project, target_config, main_repo, opts)
|
||||
return self.error_occured
|
||||
|
||||
@ -1295,17 +1283,14 @@ class CommandLineInterface(ToolBase.CommandLineInterface):
|
||||
print('-> do_update nonfree')
|
||||
|
||||
# Switch to nonfree repo (ugly, but that's how the code was setup).
|
||||
self.options.repos_ = self.options.repos
|
||||
self.options.repos = ['/'.join([nonfree, main_repo])]
|
||||
self.postoptparse()
|
||||
|
||||
repos_ = self.repos
|
||||
opts_nonfree = copy.deepcopy(opts)
|
||||
opts_nonfree.project = nonfree
|
||||
self.repos = self.expand_repos(nonfree, main_repo)
|
||||
self.do_update('update', opts_nonfree)
|
||||
|
||||
# Switch repo back to main target project.
|
||||
self.options.repos = self.options.repos_
|
||||
self.postoptparse()
|
||||
self.repos = repos_
|
||||
|
||||
print('-> update_merge')
|
||||
self.update_merge(nonfree if drop_list else False)
|
||||
|
Loading…
x
Reference in New Issue
Block a user