requestfinder: make devel project configurable

This commit is contained in:
Ludwig Nussel 2018-04-26 11:00:50 +02:00
parent 7d650af54e
commit c0b472c633

View File

@ -40,7 +40,6 @@ class Requestfinder(ToolBase.ToolBase):
def __init__(self): def __init__(self):
ToolBase.ToolBase.__init__(self) ToolBase.ToolBase.__init__(self)
self.devel = None
def fill_package_meta(self, project): def fill_package_meta(self, project):
self.package_metas = dict() self.package_metas = dict()
@ -50,9 +49,10 @@ class Requestfinder(ToolBase.ToolBase):
name = p.attrib['name'] name = p.attrib['name']
self.package_metas[name] = p self.package_metas[name] = p
def find_requests(self, xquery): def find_requests(self, settings):
xquery = settings['query']
if self.devel: if settings['devel']:
self.fill_package_meta('openSUSE:Factory') self.fill_package_meta('openSUSE:Factory')
url = osc.core.makeurl(self.apiurl, ('search', 'request'), {"match": xquery}) url = osc.core.makeurl(self.apiurl, ('search', 'request'), {"match": xquery})
@ -63,11 +63,11 @@ class Requestfinder(ToolBase.ToolBase):
for request in root.findall('request'): for request in root.findall('request'):
req = osc.core.Request() req = osc.core.Request()
req.read(request) req.read(request)
if self.devel: if settings['devel']:
p = req.actions[0].tgt_package p = req.actions[0].tgt_package
pm = self.package_metas[p] if p in self.package_metas else None pm = self.package_metas[p] if p in self.package_metas else None
devel = pm.find('devel') if pm else None devel = pm.find('devel') if pm else None
if devel is None or devel.get('project') == self.devel: if devel is None or devel.get('project') in settings['devel']:
self.requests.append(req) self.requests.append(req)
else: else:
self.requests.append(req) self.requests.append(req)
@ -87,13 +87,10 @@ class CommandLineInterface(ToolBase.CommandLineInterface):
def get_optparser(self): def get_optparser(self):
parser = ToolBase.CommandLineInterface.get_optparser(self) parser = ToolBase.CommandLineInterface.get_optparser(self)
parser.add_option('--devel', dest='devel', metavar='PROJECT',
help='only packages with devel project')
return parser return parser
def setup_tool(self): def setup_tool(self):
tool = Requestfinder() tool = Requestfinder()
tool.devel = self.options.devel
return tool return tool
def _load_settings(self, settings, name): def _load_settings(self, settings, name):
@ -108,6 +105,7 @@ class CommandLineInterface(ToolBase.CommandLineInterface):
@cmdln.option('--action', metavar='action', help='action (accept/decline)') @cmdln.option('--action', metavar='action', help='action (accept/decline)')
@cmdln.option('--settings', metavar='settings', help='settings to load from config file') @cmdln.option('--settings', metavar='settings', help='settings to load from config file')
@cmdln.option('-m', '--message', metavar="message", help="message") @cmdln.option('-m', '--message', metavar="message", help="message")
@cmdln.option('--devel', dest='devel', metavar='PROJECT', action='append', help='only packages with specified devel project')
def do_review(self, subcmd, opts): def do_review(self, subcmd, opts):
"""${cmd_name}: print commands for reviews """${cmd_name}: print commands for reviews
@ -122,6 +120,7 @@ class CommandLineInterface(ToolBase.CommandLineInterface):
'exclude-project': None, 'exclude-project': None,
'exclude-user': None, 'exclude-user': None,
'exclude-group': None, 'exclude-group': None,
'devel': None,
} }
if opts.settings: if opts.settings:
@ -134,13 +133,16 @@ class CommandLineInterface(ToolBase.CommandLineInterface):
if opts.message: if opts.message:
settings['message'] = opts.message settings['message'] = opts.message
if opts.devel:
settings['devel'] = opts.devel
if opts.query: if opts.query:
settings['query'] = opts.query settings['query'] = opts.query
if not settings['query']: if not settings['query']:
raise Exception('please specify query') raise Exception('please specify query')
rqs = self.tool.find_requests(settings['query']) rqs = self.tool.find_requests(settings)
for r in rqs: for r in rqs:
if r.actions[0].type == 'submit': if r.actions[0].type == 'submit':
print(' '.join(('#', r.reqid, r.actions[0].type, r.actions[0].src_project, r.actions[0].src_package, r.actions[0].tgt_project))) print(' '.join(('#', r.reqid, r.actions[0].type, r.actions[0].src_project, r.actions[0].src_package, r.actions[0].tgt_project)))
@ -187,6 +189,7 @@ class CommandLineInterface(ToolBase.CommandLineInterface):
@cmdln.option('--action', metavar='action', help='action (accept/decline)') @cmdln.option('--action', metavar='action', help='action (accept/decline)')
@cmdln.option('--settings', metavar='settings', help='settings to load from config file') @cmdln.option('--settings', metavar='settings', help='settings to load from config file')
@cmdln.option('-m', '--message', metavar="message", help="message") @cmdln.option('-m', '--message', metavar="message", help="message")
@cmdln.option('--devel', dest='devel', metavar='PROJECT', action='append', help='only packages with specified devel project')
def do_request(self, subcmd, opts): def do_request(self, subcmd, opts):
"""${cmd_name}: print commands for requests """${cmd_name}: print commands for requests
@ -198,14 +201,28 @@ class CommandLineInterface(ToolBase.CommandLineInterface):
'action': 'reopen', 'action': 'reopen',
'message': 'reopen', 'message': 'reopen',
'query': None, 'query': None,
'devel': None,
} }
if opts.settings: if opts.settings:
self._load_settings(settings, opts.settings) self._load_settings(settings, opts.settings)
rqs = self.tool.find_requests(settings['query']) if opts.action:
settings['action'] = opts.action
settings['message'] = opts.action
if opts.message:
settings['message'] = opts.message
if opts.devel:
settings['devel'] = opts.devel
rqs = self.tool.find_requests(settings)
for r in rqs: for r in rqs:
print('#', r.reqid, r.get_creator(), r.actions[0].src_project, r.actions[0].src_package, r.actions[0].tgt_project) if r.actions[0].type == 'submit':
print(' '.join(('#', r.reqid, r.actions[0].type, r.actions[0].src_project, r.actions[0].src_package, r.actions[0].tgt_project)))
else:
print(' '. join(('#', r.reqid, r.actions[0].type, r.actions[0].tgt_project)))
print("osc rq {} -m '{}' {}".format(settings['action'], settings['message'], r.reqid)) print("osc rq {} -m '{}' {}".format(settings['action'], settings['message'], r.reqid))
def help_examples(self): def help_examples(self):
@ -224,6 +241,7 @@ class CommandLineInterface(ToolBase.CommandLineInterface):
./doit.sh ./doit.sh
""" """
if __name__ == "__main__": if __name__ == "__main__":
app = CommandLineInterface() app = CommandLineInterface()
sys.exit(app.main()) sys.exit(app.main())