X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=apps%2Fpatchwork%2Fbin%2Fpwclient;h=d630c5bba0797dda709077c470026d3d9dbcc8cf;hb=12640140834e7a5fb2f1bf47bb4be8da4dc29bd0;hp=86feef0fb56297d53cb290ca38f7205a6e1a0bc3;hpb=5eb03e3639ea2bc599e42372f0570df653faeeb2;p=patchwork diff --git a/apps/patchwork/bin/pwclient b/apps/patchwork/bin/pwclient index 86feef0..d630c5b 100755 --- a/apps/patchwork/bin/pwclient +++ b/apps/patchwork/bin/pwclient @@ -68,7 +68,7 @@ class Filter: else: self.d['state_id'] = id - if self.project != "": + if self.project != None: id = project_id_by_name(rpc, self.project) if id == 0: sys.stderr.write("Note: No Project found matching %s, " \ @@ -144,7 +144,7 @@ def list_patches(patches): def action_list(rpc, filter, submitter_str, delegate_str): filter.resolve_ids(rpc) - if submitter_str != "": + if submitter_str != None: ids = person_ids_by_name(rpc, submitter_str) if len(ids) == 0: sys.stderr.write("Note: Nobody found matching *%s*\n" % \ @@ -161,7 +161,7 @@ def action_list(rpc, filter, submitter_str, delegate_str): list_patches(patches) return - if delegate_str != "": + if delegate_str != None: ids = person_ids_by_name(rpc, delegate_str) if len(ids) == 0: sys.stderr.write("Note: Nobody found matching *%s*\n" % \ @@ -317,11 +317,13 @@ class _RecursiveHelpAction(argparse._HelpAction): action for action in parser._actions if isinstance(action, argparse._SubParsersAction) ] + hash_n_id_actions = set(['hash', 'id', 'help']) for subparsers_action in subparsers_actions: for choice, subparser in subparsers_action.choices.items(): # gross but the whole thing is.. - if (len(subparser._actions) == 2 \ - and ['hash', 'id'] == [a.dest for a in subparser._actions])\ + if (len(subparser._actions) == 3 \ + and set([a.dest for a in subparser._actions]) \ + == hash_n_id_actions) \ or len(subparser._actions) == 0: continue print("command '{}'".format(choice)) @@ -370,6 +372,11 @@ def main(): 'patch_name', metavar='STR', nargs='?', help='substring to search for patches by name', ) + help_parser = argparse.ArgumentParser(add_help=False, version=False) + help_parser.add_argument( + '--help', action='help', help=argparse.SUPPRESS, + #help='''show this help message and exit''' + ) action_parser = argparse.ArgumentParser( prog='pwclient', @@ -390,30 +397,30 @@ def main(): metavar='' ) apply_parser = subparsers.add_parser( - 'apply', parents=[hash_parser], + 'apply', parents=[hash_parser, help_parser], add_help=False, help='''Apply a patch (in the current dir, using -p1)''' ) apply_parser.set_defaults(subcmd='apply') git_am_parser = subparsers.add_parser( - 'git-am', parents=[hash_parser], + 'git-am', parents=[hash_parser, help_parser], add_help=False, help='''Apply a patch to current git branch using "git am".''' ) - git_am_parser.set_defaults(subcmd='git-am') + git_am_parser.set_defaults(subcmd='git_am') git_am_parser.add_argument( '-s', '--signoff', action='store_true', help='''pass --signoff to git-am''' ) get_parser = subparsers.add_parser( - 'get', parents=[hash_parser], + 'get', parents=[hash_parser, help_parser], add_help=False, help='''Download a patch and save it locally''' ) get_parser.set_defaults(subcmd='get') info_parser = subparsers.add_parser( - 'info', parents=[hash_parser], + 'info', parents=[hash_parser, help_parser], add_help=False, help='''Display patchwork info about a given patch ID''' ) @@ -431,18 +438,17 @@ def main(): ) states_parser.set_defaults(subcmd='states') view_parser = subparsers.add_parser( - 'view', parents=[hash_parser], + 'view', parents=[hash_parser, help_parser], add_help=False, help='''View a patch''' ) view_parser.set_defaults(subcmd='view') update_parser = subparsers.add_parser( - 'update', parents=[hash_parser], + 'update', parents=[hash_parser, help_parser], add_help=False, help='''Update patch''', epilog='''Using a COMMIT-REF allows for only one ID to be specified''', ) - update_parser.set_defaults(subcmd='update') update_parser.add_argument( '-c', metavar='COMMIT-REF', help='''commit reference hash''' @@ -452,11 +458,11 @@ def main(): required=True, help='''Set patch state (e.g., 'Accepted', 'Superseded' etc.)''' ) - + update_parser.set_defaults(subcmd='update') list_parser = subparsers.add_parser("list", add_help=False, #aliases=['search'], - parents=[filter_parser], + parents=[filter_parser, help_parser], help='''List patches, using the optional filters specified below and an optional substring to search for patches by name''' @@ -464,16 +470,19 @@ def main(): list_parser.set_defaults(subcmd='list') search_parser = subparsers.add_parser("search", add_help=False, - parents=[filter_parser], + parents=[filter_parser, help_parser], help='''Alias for "list"''' ) + # Poor man's argparse aliases: + # We register the "search" parser but effectively use "list" for the + # help-text. search_parser.set_defaults(subcmd='list') if len(sys.argv) < 2: action_parser.print_help() sys.exit(0) args = action_parser.parse_args() - args=dict(vars(args)) + args = dict(vars(args)) action = args.get('subcmd') if args.get('hash') and len(args.get('id')): @@ -485,28 +494,16 @@ def main(): # set defaults filt = Filter() - submitter_str = "" - delegate_str = "" - project_str = "" - commit_str = "" - state_str = "" - hash_str = None - msgid_str = "" - patch_ids = None + commit_str = None url = DEFAULT_URL - if args.get('s'): - state_str = args.get('s') - if args.get('p'): - project_str = args.get('p') - if args.get('w'): - submitter_str = args.get('w') - if args.get('d'): - delegate_str = args.get('d') - if args.get('hash'): - hash_str = args.get('hash') - if args.get('id'): - patch_ids = frozenset(args.get('id')) + state_str = args.get('s') + project_str = args.get('p') + submitter_str = args.get('w') + delegate_str = args.get('d') + hash_str = args.get('hash') + patch_ids = args.get('id') + msgid_str = args.get('m') if args.get('c'): # update multiple IDs with a single commit-hash does not make sense if action == 'update' and patch_ids and len(patch_ids) > 1: @@ -516,8 +513,7 @@ def main(): update_parser.print_help() sys.exit(1) commit_str = args.get('c') - if args.get('m'): - msgid_str = args.get('m') + if args.get('n') != None: try: filt.add("max_count", args.get('n')) @@ -572,7 +568,6 @@ def main(): if not config.has_section(project_str): sys.stderr.write("No section for project %s\n" % project_str) sys.exit(1) - if not config.has_option(project_str, 'url'): sys.stderr.write("No URL for project %s\n" % project_str) sys.exit(1) @@ -621,11 +616,8 @@ def main(): patch_ids = [patch_id_from_hash(rpc, project_str, hash_str)] # helper for non_empty() to print correct helptext - h = None - try: - h = locals()[action + '_parser'] - except: - pass # never happens + h = locals()[action + '_parser'] + # Require either hash_str or IDs for def non_empty(h, patch_ids): """Error out if no patch IDs were specified""" @@ -654,26 +646,30 @@ def main(): if len(s) > 0: print unicode(s).encode("utf-8") - elif action in ('get', 'save', 'info'): - if action == 'info': - [action_info(rpc, patch_id) for patch_id in non_empty(h, patch_ids)] - else: - [action_get(rpc, patch_id) for patch_id in non_empty(h, patch_ids)] + elif action == 'info': + for patch_id in non_empty(h, patch_ids): + action_info(rpc, patch_id) + + elif action == 'get': + for patch_id in non_empty(h, patch_ids): + action_get(rpc, patch_id) elif action == 'apply': - [action_apply(rpc, patch_id) for patch_id in non_empty(h, patch_ids)] + for patch_id in non_empty(h, patch_ids): + action_apply(rpc, patch_id) - elif action == 'git-am': + elif action == 'git_am': cmd = ['git', 'am'] if do_signoff: cmd.append('-s') - [action_apply(rpc, patch_id, cmd) for patch_id in - non_empty(h, patch_ids)] + for patch_id in non_empty(h, patch_ids): + action_apply(rpc, patch_id, cmd) elif action == 'update': - [action_update_patch(rpc, patch_id, state = state_str, + for patch_id in non_empty(h, patch_ids): + action_update_patch(rpc, patch_id, state = state_str, commit = commit_str - ) for patch_id in non_empty(h, patch_ids)] + ) else: sys.stderr.write("Unknown action '%s'\n" % action)