openSUSE-release-tools/devel-project.py
2017-03-09 23:40:31 -06:00

76 lines
2.6 KiB
Python
Executable File

#!/usr/bin/python
import argparse
import sys
from xml.etree import cElementTree as ET
import osc.conf
import osc.core
from osclib.conf import Config
from osclib.stagingapi import StagingAPI
def staging_api(args):
Config(args.project)
api = StagingAPI(osc.conf.config['apiurl'], args.project)
staging = '%s:Staging' % api.project
return (api, staging)
def devel_projects_get(apiurl, project):
"""
Returns a sorted list of devel projects for a given project.
Loads all packages for a given project, checks them for a devel link and
keeps a list of unique devel projects.
"""
devel_projects = {}
url = osc.core.makeurl(apiurl, ['search', 'package'], "match=[@project='%s']" % project)
root = ET.parse(osc.core.http_GET(url)).getroot()
for package in root.findall('package'):
devel = package.find('devel')
if devel is not None:
devel_projects[devel.attrib['project']] = True
return sorted(devel_projects)
def list(args):
devel_projects = devel_projects_get(osc.conf.config['apiurl'], args.project)
if len(devel_projects) == 0:
print('no devel projects found')
else:
out = '\n'.join(devel_projects)
print(out)
if args.write:
api, staging = staging_api(args)
if api.load_file_content(staging, 'dashboard', 'devel_projects') != out:
api.save_file_content(staging, 'dashboard', 'devel_projects', out)
def devel_projects_load(args):
api, staging = staging_api(args)
devel_projects = api.load_file_content(staging, 'dashboard', 'devel_projects')
if devel_projects:
return devel_projects.splitlines()
raise Exception('no devel projects found')
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Operate on devel projects for a given project.')
subparsers = parser.add_subparsers(title='subcommands')
parser.add_argument('-A', '--apiurl', metavar='URL', help='API URL')
parser.add_argument('-d', '--debug', action='store_true', help='print info useful for debuging')
parser.add_argument('-p', '--project', default='openSUSE:Factory', metavar='PROJECT', help='project from which to source devel projects')
parser_list = subparsers.add_parser('list', help='List devel projects.')
parser_list.set_defaults(func=list)
parser_list.add_argument('-w', '--write', action='store_true', help='write to dashboard container package')
args = parser.parse_args()
osc.conf.get_config(override_apiurl=args.apiurl)
osc.conf.config['debug'] = args.debug
sys.exit(args.func(args))