[PATCH] pwclient: add option to print statistics, similar to 'list' or 'search'.

Arnout Vandecappelle (Essensium/Mind) arnout at mind.be
Wed Feb 19 07:02:59 EST 2014


This option makes it possible to gather statistics about pending, accepted,
etc. patches.

Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout at mind.be>
---
 apps/patchwork/bin/pwclient | 26 ++++++++++++++++++++------
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/apps/patchwork/bin/pwclient b/apps/patchwork/bin/pwclient
index 0c0ccaf..c6ea637 100755
--- a/apps/patchwork/bin/pwclient
+++ b/apps/patchwork/bin/pwclient
@@ -120,6 +120,7 @@ def usage():
                         below and an optional substring to search for patches
                         by name
         search [str]  : Same as 'list'
+        stats [str]   : Like 'list', but only print number of patches per state
         view <ID>     : View a patch
         update [-s state] [-c commit-ref] <ID>
                       : Update patch\n""")
@@ -170,7 +171,16 @@ def list_patches(patches):
     for patch in patches:
         print("%-7d %-12s %s" % (patch['id'], patch['state'], patch['name']))
 
-def action_list(rpc, filter, submitter_str, delegate_str):
+def stats_patches(patches):
+    """Summarize a list of patches to stdout."""
+    statemap = {}
+    for patch in patches:
+        statecnt = statemap.get(patch['state'], 0)
+        statemap[patch['state']] = statecnt + 1
+    for state, statecnt in statemap.items():
+        print("%-12s: %d" % state, statecnt)
+
+def action_list(rpc, filter, submitter_str, delegate_str, print_cb):
     filter.resolve_ids(rpc)
 
     if submitter_str != "":
@@ -187,7 +197,7 @@ def action_list(rpc, filter, submitter_str, delegate_str):
                 f = filter
                 f.add("submitter_id", id)
                 patches = rpc.patch_list(f.d)
-                list_patches(patches)
+                print_cb(patches)
         return
 
     if delegate_str != "":
@@ -203,11 +213,11 @@ def action_list(rpc, filter, submitter_str, delegate_str):
                 f = filter
                 f.add("delegate_id", id)
                 patches = rpc.patch_list(f.d)
-                list_patches(patches)
+                print_cb(patches)
         return
 
     patches = rpc.patch_list(filter.d)
-    list_patches(patches)
+    print_cb(patches)
 
 def action_projects(rpc):
     projects = rpc.project_list("", 0)
@@ -430,10 +440,14 @@ def main():
             sys.exit(1)
 
 
-    if action == 'list' or action == 'search':
+    if action in ('list', 'search', 'stats'):
         if len(args) > 0:
             filt.add("name__icontains", args[0])
-        action_list(rpc, filt, submitter_str, delegate_str)
+        if action == 'stats':
+            print_cb = stats_patches
+        else:
+            print_cb = list_patches
+        action_list(rpc, filt, submitter_str, delegate_str, print_cb)
 
     elif action.startswith('project'):
         action_projects(rpc)
-- 
1.9.rc1



More information about the Patchwork mailing list