[PATCH 6/n] pwclient: diagnose hash_parser errors gracefully
Bernhard Reutner-Fischer
rep.dot.nop at gmail.com
Fri Aug 29 22:02:08 EST 2014
a386e636cc0adaa760a66b6ab042178027fc45c7 removed argparse mutual
exclusive group, so manually diagnose:
1) missing required hash_str / IDs
2) if both hash_str as well as IDs are seen
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop at gmail.com>
---
apps/patchwork/bin/pwclient | 45 +++++++++++++++++++++++++++++++++------------
1 file changed, 33 insertions(+), 12 deletions(-)
diff --git a/apps/patchwork/bin/pwclient b/apps/patchwork/bin/pwclient
index bd79b3a..86feef0 100755
--- a/apps/patchwork/bin/pwclient
+++ b/apps/patchwork/bin/pwclient
@@ -332,7 +332,7 @@ class _RecursiveHelpAction(argparse._HelpAction):
def main():
hash_parser = argparse.ArgumentParser(add_help=False, version=False)
hash_parser.add_argument(
- '-h', metavar='HASH', dest='hash', action='store', required=False,
+ '-h', metavar='HASH', dest='hash', action='store',
help='''Lookup by patch hash'''
)
hash_parser.add_argument(
@@ -474,11 +474,13 @@ def main():
args = action_parser.parse_args()
args=dict(vars(args))
+ action = args.get('subcmd')
if args.get('hash') and len(args.get('id')):
# mimic mutual exclusive group
- sys.stderr.write("[-h HASH] and [ID [ID ...]] are mutually exlusive!\n")
- action_parser.print_help()
+ sys.stderr.write("Error: [-h HASH] and [ID [ID ...]] " +
+ "are mutually exlusive\n")
+ locals()[action + '_parser'].print_help()
sys.exit(1)
# set defaults
@@ -493,8 +495,6 @@ def main():
patch_ids = None
url = DEFAULT_URL
- action = args.get('subcmd')
-
if args.get('s'):
state_str = args.get('s')
if args.get('p'):
@@ -510,7 +510,9 @@ def main():
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:
- sys.stderr.write("Declining update with COMMIT-REF on multiple IDs\n")
+ sys.stderr.write(
+ "Declining update with COMMIT-REF on multiple IDs\n"
+ )
update_parser.print_help()
sys.exit(1)
commit_str = args.get('c')
@@ -618,6 +620,23 @@ def main():
if hash_str != None:
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
+ # Require either hash_str or IDs for
+ def non_empty(h, patch_ids):
+ """Error out if no patch IDs were specified"""
+ if patch_ids == None or len(patch_ids) < 1:
+ sys.stderr.write("Error: Missing Argument! " +
+ "Either [-h HASH] or [ID [ID ...]] are required\n")
+ if h:
+ h.print_help()
+ sys.exit(1)
+ return patch_ids
+
if action == 'list' or action == 'search':
if args.get('patch_name') != None:
filt.add("name__icontains", args.get('patch_name'))
@@ -630,29 +649,31 @@ def main():
action_states(rpc)
elif action == 'view':
- for patch_id in patch_ids:
+ for patch_id in non_empty(h, patch_ids):
s = rpc.patch_get_mbox(patch_id)
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 patch_ids]
+ [action_info(rpc, patch_id) for patch_id in non_empty(h, patch_ids)]
else:
- [action_get(rpc, patch_id) for patch_id in patch_ids]
+ [action_get(rpc, patch_id) for patch_id in non_empty(h, patch_ids)]
elif action == 'apply':
- [action_apply(rpc, patch_id) for patch_id in patch_ids]
+ [action_apply(rpc, patch_id) for patch_id in non_empty(h, patch_ids)]
elif action == 'git-am':
cmd = ['git', 'am']
if do_signoff:
cmd.append('-s')
- [action_apply(rpc, patch_id, cmd) for patch_id in patch_ids]
+ [action_apply(rpc, patch_id, cmd) for patch_id in
+ non_empty(h, patch_ids)]
elif action == 'update':
[action_update_patch(rpc, patch_id, state = state_str,
- commit = commit_str) for patch_id in patch_ids]
+ commit = commit_str
+ ) for patch_id in non_empty(h, patch_ids)]
else:
sys.stderr.write("Unknown action '%s'\n" % action)
--
2.1.0.rc1
More information about the Patchwork
mailing list