From 550ab59e4e7731e3d5ab10db1cf29c50b6b356e3 Mon Sep 17 00:00:00 2001 From: Jimmy Berry Date: Tue, 31 Jan 2017 18:24:04 -0600 Subject: [PATCH 1/3] request_splitter: replace incorrect devel project lookup copied from adi. Instead of checking action/source the action/target should be used. --- osclib/request_splitter.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/osclib/request_splitter.py b/osclib/request_splitter.py index 10f8c0d83..ea78c88d5 100644 --- a/osclib/request_splitter.py +++ b/osclib/request_splitter.py @@ -67,7 +67,8 @@ def split(self): def suppliment(self, request, target_package): """ Provide additional information for grouping """ - devel = self.devel_project_get(request, target_package) + target_project = request.find('./action/target').get('project') + devel = self.devel_project_get(target_project, target_package) if devel: request.find('./action/source').set('devel_project', devel) @@ -89,12 +90,10 @@ def ring_get(self, target_package): return ring[len(self.api.crings)+1:] return None - def devel_project_get(self, request, target_project): - # Preserve logic from adi and note that not Leap development friendly. - source = request.find('./action/source') - devel = self.api.get_devel_project(source.get('project'), source.get('package')) + def devel_project_get(self, target_project, target_package): + devel = self.api.get_devel_project(target_project, target_package) if devel is None and self.api.project.startswith('openSUSE:'): - devel = self.api.get_devel_project('openSUSE:Factory', target_project) + devel = self.api.get_devel_project('openSUSE:Factory', target_package) return devel def filter_check(self, request): From f42358eaada8969e7779634ff5cf2471b1642a45 Mon Sep 17 00:00:00 2001 From: Jimmy Berry Date: Tue, 31 Jan 2017 18:36:54 -0600 Subject: [PATCH 2/3] request_splitter: move @devel_project to action/target. With the source no longer being checked for devel project and the fact that delete requests and such will not have source, but make sense to have a devel project moving to target makes more sense. --- osc-staging.py | 8 ++++---- osclib/adi_command.py | 2 +- osclib/list_command.py | 2 +- osclib/request_splitter.py | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/osc-staging.py b/osc-staging.py index c84cb7c2d..688a712bb 100644 --- a/osc-staging.py +++ b/osc-staging.py @@ -144,18 +144,18 @@ def do_staging(self, subcmd, opts, *args): request node as returned by OBS. Several values will supplement the normal request node. - - ./action/source/@devel_project: the devel project for the package + - ./action/target/@devel_project: the devel project for the package - ./action/target/@ring: the ring to which the package belongs - ./@ignored: either false or the provided message Some useful examples: --filter-by './action/target[starts-with(@package, "yast-")]' - --filter-by './action/source/[@devel_project="YaST:Head"]' + --filter-by './action/target/[@devel_project="YaST:Head"]' --filter-by './action/target[starts-with(@ring, "1")]' --filter-by '@id!="1234567"' - --group-by='./action/source/@devel_project' + --group-by='./action/target/@devel_project' --group-by='./action/target/@ring' Multiple filter-by or group-by options may be used at the same time. @@ -164,7 +164,7 @@ def do_staging(self, subcmd, opts, *args): provided in addition to a list of requests by which to filter. A more complex example: - select --group-by='./action/source/@devel_project' A B C 123 456 789 + select --group-by='./action/target/@devel_project' A B C 123 456 789 This will separate the requests 123, 456, 789 by devel project and only consider stagings A, B, or C, if available, for placement. diff --git a/osclib/adi_command.py b/osclib/adi_command.py index 61bab0d6e..8d4dc459b 100644 --- a/osclib/adi_command.py +++ b/osclib/adi_command.py @@ -58,7 +58,7 @@ def create_new_adi(self, wanted_requests, by_dp=False, split=False): if split: splitter.group_by('./@id') elif by_dp: - splitter.group_by('./action/source/@devel_project') + splitter.group_by('./action/target/@devel_project') else: splitter.group_by('./action/source/@project') splitter.split() diff --git a/osclib/list_command.py b/osclib/list_command.py index 78a5d7d92..06448ae03 100644 --- a/osclib/list_command.py +++ b/osclib/list_command.py @@ -38,7 +38,7 @@ def perform(self, packages=None, supersede=False): splitter.reset() splitter.filter_add('./action[not(@type="add_role" or @type="change_devel")]') - splitter.group_by('./action/source/@devel_project') + splitter.group_by('./action/target/@devel_project') splitter.split() is_factory = self.api.project != 'openSUSE:Factory' diff --git a/osclib/request_splitter.py b/osclib/request_splitter.py index ea78c88d5..6dc8c9792 100644 --- a/osclib/request_splitter.py +++ b/osclib/request_splitter.py @@ -70,7 +70,7 @@ def suppliment(self, request, target_package): target_project = request.find('./action/target').get('project') devel = self.devel_project_get(target_project, target_package) if devel: - request.find('./action/source').set('devel_project', devel) + request.find('./action/target').set('devel_project', devel) ring = self.ring_get(target_package) if ring: From 38dbf5b99a14cacde464a2d30032f51f94e0ecb6 Mon Sep 17 00:00:00 2001 From: Jimmy Berry Date: Wed, 1 Feb 2017 08:08:04 -0600 Subject: [PATCH 3/3] request_splitter: refactor to remove target_package param for suppliment(). --- osclib/request_splitter.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/osclib/request_splitter.py b/osclib/request_splitter.py index 6dc8c9792..b91cd660b 100644 --- a/osclib/request_splitter.py +++ b/osclib/request_splitter.py @@ -34,20 +34,19 @@ def group_by(self, xpath): def filter_only(self): ret = [] for request in self.requests: - target_package = request.find('./action/target').get('package') - self.suppliment(request, target_package) + self.suppliment(request) if self.filter_check(request): ret.append(request) return ret def split(self): for request in self.requests: - target_package = request.find('./action/target').get('package') - self.suppliment(request, target_package) + self.suppliment(request) if not self.filter_check(request): continue + target_package = request.find('./action/target').get('package') if self.in_ring != (not self.api.ring_packages.get(target_package)): # Request is of desired ring type. key = self.group_key_build(request) @@ -65,16 +64,18 @@ def split(self): else: self.other.append(request) - def suppliment(self, request, target_package): + def suppliment(self, request): """ Provide additional information for grouping """ - target_project = request.find('./action/target').get('project') + target = request.find('./action/target') + target_project = target.get('project') + target_package = target.get('package') devel = self.devel_project_get(target_project, target_package) if devel: - request.find('./action/target').set('devel_project', devel) + target.set('devel_project', devel) ring = self.ring_get(target_package) if ring: - request.find('./action/target').set('ring', ring) + target.set('ring', ring) request_id = int(request.get('id')) if request_id in self.requests_ignored: