From 7d9ffa07aca4bfc8e75036c254df8bae9a77f0b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= Date: Mon, 24 Mar 2014 13:46:51 +0100 Subject: [PATCH 1/3] Do not print needless newlines in check. --- osclib/check_command.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/osclib/check_command.py b/osclib/check_command.py index 3b774ab8..c25e1632 100644 --- a/osclib/check_command.py +++ b/osclib/check_command.py @@ -18,7 +18,7 @@ class CheckCommand(object): # If the project is empty just skip it if not state: - return + return None print('Checking staging project: {}'.format(project)) if type(state) is list: @@ -28,6 +28,8 @@ class CheckCommand(object): else: print(' ++ Acceptable staging project') + return True + def perform(self, project): """ Check one staging project verbosibly or all of them at once @@ -37,8 +39,8 @@ class CheckCommand(object): self._check_one_project(project, True) else: for project in self.api.get_staging_projects(): - self._check_one_project(project, False) - # newline to split multiple prjs at once - print('') + if self._check_one_project(project, False): + # newline to split multiple prjs at once + print('') return True From ea8042869f9b34253a01990637f167d0a9ad72e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= Date: Mon, 24 Mar 2014 14:24:43 +0100 Subject: [PATCH 2/3] Quote the package for url parsing. This should solve progress issue#1892. --- osclib/request_finder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osclib/request_finder.py b/osclib/request_finder.py index be125f9f..aba58d0f 100644 --- a/osclib/request_finder.py +++ b/osclib/request_finder.py @@ -100,7 +100,7 @@ class RequestFinder(object): """ query = 'states=new,review,declined&project=openSUSE:Factory&view=collection&package={}' - query = query.format(package) + query = query.format(urllib2.quote(package)) url = makeurl(self.apiurl, ['request'], query) f = http_GET(url) From 956448458065f7e14775566809706ca9aad99cfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= Date: Mon, 24 Mar 2014 14:46:50 +0100 Subject: [PATCH 3/3] Split unselect from osc-staging.py to separate file and fix add_review to not bother with review if the sr is already dead. Fixes progress issue#1781. --- osc-staging.py | 5 +---- osclib/stagingapi.py | 8 ++++++-- osclib/unselect_command.py | 21 +++++++++++++++++++++ 3 files changed, 28 insertions(+), 6 deletions(-) create mode 100644 osclib/unselect_command.py diff --git a/osc-staging.py b/osc-staging.py index 27fd73c9..af3f1bf2 100644 --- a/osc-staging.py +++ b/osc-staging.py @@ -111,10 +111,7 @@ def do_staging(self, subcmd, opts, *args): elif cmd == 'accept': return AcceptCommand(api).perform(api. prj_from_letter(args[1])) elif cmd == 'unselect': - for rq, rq_prj in RequestFinder.find_staged_sr(args[1:], opts.apiurl, api).items(): - print('Unselecting "{}" from "{}"'.format(rq, rq_prj['staging'])) - api.rm_from_prj(rq_prj['staging'], request_id=rq) - api.add_review(rq, by_group='factory-staging', msg='Please recheck') + return UnselectCommand(api).perform(args[1:]) elif cmd == 'select': tprj = api.prj_from_letter(args[1]) return SelectCommand(api).perform(tprj, args[2:], opts.move, opts.from_) diff --git a/osclib/stagingapi.py b/osclib/stagingapi.py index 6a35f806..69e94552 100644 --- a/osclib/stagingapi.py +++ b/osclib/stagingapi.py @@ -594,7 +594,7 @@ class StagingAPI(object): filename = binary.get('filename', '') if filename.endswith('.iso'): break - + if not filename: return None @@ -613,7 +613,7 @@ class StagingAPI(object): bn = int(result.group(2)) * 100 + int(result.group(3)) jobname += '.{}'.format(bn) jobname += "-minimalx" - + bestjob = None for job in jobs: if job['name'] == jobname and job['result'] != 'incomplete': @@ -843,6 +843,10 @@ class StagingAPI(object): if by_group and i.by_group == by_group and i.state == 'new': return + # don't try to change reviews if the request is dead + if not req.state.name in ['new', 'review']: + return + query = {} if by_project: query['by_project'] = by_project diff --git a/osclib/unselect_command.py b/osclib/unselect_command.py new file mode 100644 index 00000000..5e148a95 --- /dev/null +++ b/osclib/unselect_command.py @@ -0,0 +1,21 @@ +from osc import oscerr +from osc.core import http_GET + +from osclib.request_finder import RequestFinder + + +class UnselectCommand(object): + + def __init__(self, api): + self.api = api + + def perform(self, packages): + """ + Remove request from staging project + :param packages: packages/requests to delete from staging projects + """ + for request, request_project in RequestFinder.find_staged_sr(packages, opts.apiurl, api).items(): + staging_project = request_project['staging'] + print('Unselecting "{}" from "{}"'.format(request, staging_project)) + self.api.rm_from_prj(staging_project, request_id=request) + self.api.add_review(request, by_group='factory-staging', msg='Please recheck')