diff --git a/osclib/request_finder.py b/osclib/request_finder.py index 69fa543a..f653e9cd 100644 --- a/osclib/request_finder.py +++ b/osclib/request_finder.py @@ -93,16 +93,23 @@ class RequestFinder: for sr in root.findall('request'): # TODO: check the package matches - OBS is case insensitive request = int(sr.get('id')) - self.srs[request] = {'project': 'openSUSE:Factory'} + state = sr.find('state').get('name') + + self.srs[request] = {'project': 'openSUSE:Factory', 'state': state } review = self._new_review_by_project(request, sr) if review: self.srs[int(request)]['staging'] = review if ret: - msg = 'There are multiple requests for package "{}": {} and {}' - msg = msg.format(package, ret, request) - raise oscerr.WrongArgs(msg) + if self.srs[ret]['state'] == 'declined': + # ignore previous requests if they are declined + # if they are the last one, it's fine to return them + del self.srs[ret] + else: + msg = 'There are multiple requests for package "{}": {} and {}' + msg = msg.format(package, ret, request) + raise oscerr.WrongArgs(msg) ret = request return ret diff --git a/osclib/select_command.py b/osclib/select_command.py index be433aed..73cc2693 100644 --- a/osclib/select_command.py +++ b/osclib/select_command.py @@ -26,6 +26,8 @@ class SelectCommand(object): package = self._package(request) for staging in self.api.get_staging_projects(): + if staging == self.tprj: # requests for the same project are fine + continue for rq in self.api.get_prj_pseudometa(staging)['requests']: if rq['id'] != request and rq['package'] == package: return (rq['id'], package, staging) @@ -50,13 +52,13 @@ class SelectCommand(object): return self.api.move_between_project(fprj, rq, self.tprj) elif 'staging' in rq_prj and not move: # Previously selected, but not explicit move - msg = 'Request {} is actually in "{}".\n' + msg = 'Request {} is already tracked in "{}".' msg = msg.format(rq, rq_prj['staging']) if rq_prj['staging'] != self.tprj: - msg += 'Use --move modifier to move the request from "{}" to "{}"' + msg += '\nUse --move modifier to move the request from "{}" to "{}"' msg = msg.format(rq_prj['staging'], self.tprj) print(msg) - return False + return True else: raise oscerr.WrongArgs('Arguments for select are not correct.')