Added --project command line option.
authorEd Bartosh <eduard.bartosh@intel.com>
Thu, 6 Feb 2014 15:44:53 +0000 (17:44 +0200)
committerEduard Bartosh <eduard.bartosh@intel.com>
Thu, 13 Feb 2014 15:44:56 +0000 (17:44 +0200)
This parameter is used to avoid resolving submission to
multiple products.

It was added to group, rmgroup, accept and reject subcommands.

Fixes: #1625
Change-Id: Id93af4564c370f92fad2397fda0955cb122e66ae
Reviewed-on: https://otctools.jf.intel.com/review/9632
Tested-by: OTC Tools Tester <ed.bartosh@linux.intel.com>
Reviewed-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
Reviewed-by: Eduard Bartosh <eduard.bartosh@intel.com>
repa.1
repa/accept.py
repa/common.py
repa/group.py
repa/reject.py
repa/rmgroup.py

diff --git a/repa.1 b/repa.1
index 1efdb6d91411258c5ea83e2382ccc15ac06e3015..b09531017b04ea7859c6080252d983417ddf47ee 100644 (file)
--- a/repa.1
+++ b/repa.1
@@ -135,6 +135,12 @@ Submit Requests in OBS for every submission and immediately accepting them.
 Print short help text about the "accept" command and exit.
 .RE
 
+.PP
+\-p, \-\-project PROJECT
+.RS 2
+Target project name. Mandatory option.
+.RE
+
 .PP
 \-comment COMMENT
 .RS 2
@@ -161,6 +167,12 @@ Submit Requests in OBS for every submission and immediately rejecting them.
 Print short help text about the "reject" command and exit.
 .RE
 
+.PP
+\-p, \-\-project PROJECT
+.RS 2
+Target project name. Mandatory option.
+.RE
+
 .PP
 \-comment COMMENT
 .RS 2
@@ -189,6 +201,12 @@ or reject multiple submissions at once.
 Print short help text about the "group" command and exit.
 .RE
 
+.PP
+\-p, \-\-project PROJECT
+.RS 2
+Target project name. Mandatory option.
+.RE
+
 .PP
 \-comment COMMENT
 .RS 2
@@ -214,6 +232,12 @@ Remove submit group.
 Print short help text about the "rmgroup" command and exit.
 .RE
 
+.PP
+\-p, \-\-project PROJECT
+.RS 2
+Target project name. Mandatory option.
+.RE
+
 .SH BUGS
 Please, report bugs to Ed Bartosh <eduard.bartosh@intel.com>.
 
index 016fae97f05b3b32bf2960e258f7e3a10dafef8a..e76e84dc6a294ab03fdd97281a18689c073a8c0c 100644 (file)
@@ -47,6 +47,8 @@ class Accept(object):
     def add_arguments(parser, _config):
         """Adds arguments to the parser. Called from [sub_]main."""
         parser.add_argument('submission', help='submission or group')
+        parser.add_argument('-p', '--project', help='target project',
+                            required=True)
         parser.add_argument('-c', '--comment', help='comment', default='')
 
     @staticmethod
@@ -54,7 +56,7 @@ class Accept(object):
         """Command line entry point. Called from [sub_]main."""
         obs = OBS(argv.apiurl, argv.apiuser, argv.apipasswd)
         return accept_or_reject(obs, argv.submission, 'accepted',
-                                argv.comment)
+                                argv.project, argv.comment)
 
 if __name__ == '__main__':
     sys.exit(sub_main(sys.argv[1:], Accept()))
index 15f42517d94e58b5bb40bc6f0950b3cfebdabc48..ac5b77dfb5cfcf6112eb4e5ed958a676f84b8b4a 100644 (file)
@@ -37,38 +37,42 @@ class RepaException(Exception):
     """Custom repa exception. All repa modules should use it."""
     pass
 
-def get_project_by_name(obs, name):
+def get_project_by_name(obs, name, target):
     """Lookup for a project in OBS by submission or group name."""
-    projects = list(obs.get_projects('^%s.*:%s$' % (OBS_PREFIX,
+    projects = list(obs.get_projects('^%s%s:%s$' % (OBS_PREFIX, target,
                                                     name.replace('/', ':'))))
     if not projects:
-        raise RepaException('OBS project not found for %s' % name)
+        raise RepaException('OBS project not found for %s %s' % \
+                            (target, name))
     if len(projects) > 1:
-        raise RepaException('%s resolves into multiple projects' % name)
+
+        plist = '\n  '.join(prj for prj, _ in projects)
+        raise RepaException('%s %s resolves into multiple projects:\n  %s' % \
+                            (target, name, plist))
 
     return projects[0][0], json.loads(projects[0][1])
 
 
-def _resolve_submissions(obs, name):
+def _resolve_submissions(obs, name, target):
     """Get list of submissions with meta. Resolves submitgroups."""
-    project, meta = get_project_by_name(obs, name)
+    project, meta = get_project_by_name(obs, name, target)
     if name.startswith('submitgroup'):
         for subm in meta['submissions']:
-            sprj, smeta = get_project_by_name(obs, subm)
+            sprj, smeta = get_project_by_name(obs, subm, target)
             yield subm, sprj, smeta
     else:
         yield name, project, meta
 
 
-def delete_project(obs, name):
+def delete_project(obs, name, target):
     """Delete OBS project related to submission or submit group."""
-    project = get_project_by_name(obs, name)[0]
+    project = get_project_by_name(obs, name, target)[0]
     obs.delete_project(project)
 
 
-def accept_or_reject(obs, submission, state, comment=''):
+def accept_or_reject(obs, submission, state, target, comment=''):
     """Create SRs and set their state for one submission or for a group."""
-    for name, project, meta in _resolve_submissions(obs, submission):
+    for name, project, meta in _resolve_submissions(obs, submission, target):
         # osc submitreq [OPTIONS] SOURCEPRJ SOURCEPKG DESTPRJ [DESTPKG]
         # osc request accept [-m TEXT] ID
         print "submission %s" % str(name)
@@ -95,5 +99,5 @@ def accept_or_reject(obs, submission, state, comment=''):
 
     # delete submit group
     if submission.startswith('submitgroup'):
-        delete_project(obs, submission)
+        delete_project(obs, submission, target)
 
index 28c2e8fd990181ae18f3b8385eb9928c58c4b8a0..ae430ae7446da07565b3429ca0aa9dd102c98ee4 100755 (executable)
@@ -38,7 +38,7 @@ from StringIO import StringIO
 
 from repa.main import sub_main
 from repa.obs import OBS, OBS_PREFIX
-from repa.common import RepaException
+from repa.common import RepaException, get_project_by_name
 
 
 def check_target_prj(submissions):
@@ -117,17 +117,13 @@ def aggregate(obs, bresults, gproject):
     return aggregated
 
 
-def group_submissions(obs, submissions, comment):
+def group_submissions(obs, submissions, target, comment):
     """Group multiple submissions into one group."""
     # find correspondent prerelease projects
     info = {}
     for submission in submissions:
-        suffix = submission.replace('/', ':')
-        found = list(obs.get_projects('^%s.*:%s$' % (OBS_PREFIX, suffix)))
-        if not found:
-            raise RepaException('OBS project not found for %s' % submission)
-        project, description = found[0]
-        info[submission] = {'project': project, 'meta': json.loads(description)}
+        project, meta = get_project_by_name(obs, submission, target)
+        info[submission] = {'project': project, 'meta': meta}
 
     # Validate submissions
     check_target_prj(info)
@@ -161,13 +157,16 @@ class Group(object):
         """Adds arguments to the parser. Called from [sub_]main."""
         parser.add_argument('submission', nargs='+',
                            help='space separated list of submissions')
+        parser.add_argument('-p', '--project', help='target project',
+                            required=True)
         parser.add_argument('-c', '--comment', help='comment', default='')
 
     @staticmethod
     def run(argv):
         """Command line entry point. Called from [sub_]main."""
         obs = OBS(argv.apiurl, argv.apiuser, argv.apipasswd)
-        return group_submissions(obs, argv.submission, argv.comment)
+        return group_submissions(obs, argv.submission, argv.project,
+                                 argv.comment)
 
 
 if __name__ == '__main__':
index 3dd63bb977137abab92557ef173ce2dcb86b95f2..4ee8d78333b766ae55f8bc11a9ceb1cff02b3e2e 100644 (file)
@@ -47,6 +47,8 @@ class Reject(object):
     def add_arguments(parser, _config):
         """Adds arguments to the parser. Called from [sub_]main."""
         parser.add_argument('submission', help='submission or group')
+        parser.add_argument('-p', '--project', help='target project',
+                            required=True)
         parser.add_argument('-c', '--comment', help='comment', default='')
 
     @staticmethod
@@ -54,7 +56,7 @@ class Reject(object):
         """Command line entry point. Called from [sub_]main."""
         obs = OBS(argv.apiurl, argv.apiuser, argv.apipasswd)
         return accept_or_reject(obs, argv.submission, 'declined',
-                                argv.comment)
+                                argv.project, argv.comment)
 
 if __name__ == '__main__':
     sys.exit(sub_main(sys.argv[1:], Reject()))
index b8fd0788d13ad857df11825567786532515c3a4d..edbe73fcd7ebecf535241f7022aa9423e2d30e74 100644 (file)
@@ -36,11 +36,11 @@ from repa.main import sub_main
 from repa.common import get_project_by_name, RepaException
 
 
-def rmgroup(obs, name):
+def rmgroup(obs, name, target):
     """Remove submission group."""
     if not name.startswith('submitgroup/'):
         raise RepaException("Group name must start from 'submitgroup/'")
-    project = get_project_by_name(obs, name)[0]
+    project = get_project_by_name(obs, name, target)[0]
     obs.delete_project(project, force=True)
     print 'Submission group %s has been removed' % name
 
@@ -56,12 +56,14 @@ class RmGroup(object):
     def add_arguments(parser, _config):
         """Adds arguments to the parser. Called from [sub_]main."""
         parser.add_argument('group', help='group of submissions')
+        parser.add_argument('-p', '--project', help='target project',
+                            required=True)
 
     @staticmethod
     def run(argv):
         """Command line entry point. Called from [sub_]main."""
         obs = OBS(argv.apiurl, argv.apiuser, argv.apipasswd)
-        return rmgroup(obs, argv.group)
+        return rmgroup(obs, argv.group, argv.project)
 
 
 if __name__ == '__main__':