All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] git-pw: include bundle sub-command
@ 2017-02-07 16:25 leonardo.sandoval.gonzalez
  0 siblings, 0 replies; only message in thread
From: leonardo.sandoval.gonzalez @ 2017-02-07 16:25 UTC (permalink / raw)
  To: yocto

From: Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com>

This new command allows to fetch bundles (set of selected patches by the user)
and print them into the stdout. For the moment, bundles must be public (otherwise
these wont be found)

Command line example:

openembedded-core$ git pw bundle newbundle --username lsandov1

Signed-off-by: Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com>
---
 git-pw/git-pw | 52 ++++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 48 insertions(+), 4 deletions(-)

diff --git a/git-pw/git-pw b/git-pw/git-pw
index f5fbdcb..554dfae 100755
--- a/git-pw/git-pw
+++ b/git-pw/git-pw
@@ -126,6 +126,11 @@ class Command(object):
             'need_project' : False,
             'need_auth'    : False,
         },
+        'bundle': {
+            'need_git_repo': True,
+            'need_project' : False,
+            'need_auth'    : False,
+        },
         'list': {
             'need_git_repo': True,
             'need_project' : True,
@@ -295,13 +300,25 @@ class Patch(RestObject):
     def url(self, url='/'):
         return '/patches/' + str(self.id) + url
 
+class Bundle(RestObject):
+
+    def __init__(self, patchwork, bundle_name, user):
+        super(Bundle, self).__init__(patchwork)
+        self.bundle_name = str(bundle_name)
+        self.user = str(user)
+
+    def url(self, url='/'):
+        return '/bundle/' + self.user + '/' + self.bundle_name + url
+
 
 class Patchwork(object):
 
+    api_version= 'api/1.0'
+
     def __init__(self, web_root, project_linkname, user):
         if not web_root.endswith('/'):
             web_root += '/'
-        self.api_base = web_root + 'api/1.0'
+        self.api_base = web_root + self.api_version
         self.web_root = web_root
         self.project = Project(self, project_linkname)
         self.user = user
@@ -372,6 +389,9 @@ class Patchwork(object):
     def get_patch(self, patch_id):
         return Patch(self, patch_id)
 
+    def get_bundle(self, bundle_name, name):
+        return Bundle(self, bundle_name, name)
+
 
 class Terminal(object):
     DEFAULT_WIDTH = 80
@@ -578,15 +598,13 @@ class GitPatchwork(object):
         # auth mechanism. In any case, using HTTPS is a must.
         username = None
         password = None
-        user = None
         try:
             username = config.get(section, 'user')
             password = config.get(section, 'password')
-            user = User(username, password)
         except:
             pass
 
-        if not user and self.cmd.need_auth:
+        if not password and self.cmd.need_auth:
             die('No authentication configured.\n\n'
                 "Please set up credentials, e.g.:\n\n"
                 "   git config patchwork.%(config)s.user myusername\n"
@@ -594,6 +612,8 @@ class GitPatchwork(object):
                     'config': self.cmd.config,
                 })
 
+        user = User(username, password)
+
         self.pw = Patchwork(web_root, project, user)
         self.pw.setup()
 
@@ -679,6 +699,20 @@ class GitPatchwork(object):
                 raise
             die('No patch with id %d.' % self.cmd.patch_id)
 
+    def do_bundle(self):
+        user = self.cmd.username or self.pw.user.username
+        if not user:
+            die('Either define a patchwork user at .git/config or set it through --username')
+
+        bundle = self.pw.get_bundle(self.cmd.bundle_name, user)
+
+        try:
+            return self._print_mbox(bundle.absolute_url('/mbox/').replace(self.pw.api_version,''))
+        except HttpError as e:
+            if e.status_code != 404:
+                raise
+            die('No user %s bundle with name %s.' % (self.cmd.user, self.cmd.bundle_name))
+
     def do_list(self):
         project = self.pw.get_project()
         params = {
@@ -973,6 +1007,16 @@ if __name__ == '__main__':
 
     parser_add_mbox_options(mbox_patch_parser)
 
+    # bundle
+    bundle_parser = subparsers.add_parser('bundle',
+        help='retrieve a mbox file of a bundle and print it on stdout')
+    bundle_parser.add_argument('--username', '-u', metavar='username',
+        type=str, help='the patchwork\'s user that created the bundle, use git\'s configured if omitted')
+    bundle_parser.add_argument('bundle_name', metavar='bundle_name',
+        type=str, help='the bundle to retrieve')
+
+    parser_add_mbox_options(bundle_parser)
+
     # poll-events
     poll_events_parser = subparsers.add_parser('poll-events',
         help='list events since the last invocation')
-- 
2.1.4



^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2017-02-07 16:18 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-07 16:25 [PATCH] git-pw: include bundle sub-command leonardo.sandoval.gonzalez

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.