Blame SOURCES/display-usage-instead-of-traceback-when-c-missing-args.patch

29a993
From e9a4bc14e15115e3493781fe8487fb4bd575ae9e Mon Sep 17 00:00:00 2001
29a993
From: John Kacur <jkacur@redhat.com>
29a993
Date: Mon, 30 May 2016 20:31:37 +0200
29a993
Subject: [PATCH] tuna: tuna-cmd: Display usage instead of traceback -c missing
29a993
 args
29a993
29a993
Display a usage messaage instead of a python traceback when a required
29a993
argument to the -c or --cpus is missing, or when the argument doesn't
29a993
make sense. (Such as passing a nonsense string, instead of a comma separated list of numbers)
29a993
29a993
- In function pick_op, handle the unusual but possible case where an
29a993
  empty string is passed as an argument.
29a993
- Display a usage message upon ValueError when caling cpustring_to_list
29a993
  when processing the -c option
29a993
29a993
This fixes various erroneous or missing input to -c, such as the
29a993
following
29a993
29a993
./tuna-cmd.py -c -P
29a993
Traceback (most recent call last):
29a993
  File "./tuna-cmd.py", line 656, in <module>
29a993
    main()
29a993
  File "./tuna-cmd.py", line 494, in main
29a993
    op_list = tuna.cpustring_to_list(a)
29a993
  File "/home/jkacur/source/tuna/tuna/tuna.py", line 124, in
29a993
cpustring_to_list
29a993
    ends = [ int(a, 0) for a in field.split("-") ]
29a993
ValueError: invalid literal for int() with base 0: 'P'
29a993
29a993
./tuna-cmd.py -c "" -P
29a993
Traceback (most recent call last):
29a993
  File "./tuna-cmd.py", line 656, in <module>
29a993
    main()
29a993
  File "./tuna-cmd.py", line 493, in main
29a993
    (op, a) = pick_op(a)
29a993
  File "./tuna-cmd.py", line 408, in pick_op
29a993
    if argument[0] in ('+', '-'):
29a993
IndexError: string index out of range
29a993
29a993
./tuna-cmd.py -c "nonesense" -P
29a993
Traceback (most recent call last):
29a993
  File "./tuna-cmd.py", line 656, in <module>
29a993
    main()
29a993
  File "./tuna-cmd.py", line 494, in main
29a993
    op_list = tuna.cpustring_to_list(a)
29a993
  File "/home/jkacur/source/tuna/tuna/tuna.py", line 124, in
29a993
cpustring_to_list
29a993
    ends = [ int(a, 0) for a in field.split("-") ]
29a993
ValueError: invalid literal for int() with base 0: 'nonesense'
29a993
29a993
This fixes bugzilla 1268287
29a993
29a993
Signed-off-by: John Kacur <jkacur@redhat.com>
29a993
---
29a993
 tuna-cmd.py | 8 +++++++-
29a993
 1 file changed, 7 insertions(+), 1 deletion(-)
29a993
29a993
diff --git a/tuna-cmd.py b/tuna-cmd.py
29a993
index ae4f78ab7d56..3c9bfaa50bb4 100755
29a993
--- a/tuna-cmd.py
29a993
+++ b/tuna-cmd.py
29a993
@@ -405,6 +405,8 @@ def irq_mapper(s):
29a993
 	return irq_list
29a993
 
29a993
 def pick_op(argument):
29a993
+        if argument == "":
29a993
+                return (None, argument)
29a993
 	if argument[0] in ('+', '-'):
29a993
 		return (argument[0], argument[1:])
29a993
 	return (None, argument)
29a993
@@ -491,7 +493,11 @@ def main():
29a993
 			list_config()
29a993
 		elif o in ("-c", "--cpus"):
29a993
 			(op, a) = pick_op(a)
29a993
-			op_list = tuna.cpustring_to_list(a)
29a993
+                        try:
29a993
+			    op_list = tuna.cpustring_to_list(a)
29a993
+                        except ValueError:
29a993
+                            usage()
29a993
+                            return
29a993
 			cpu_list = do_list_op(op, cpu_list, op_list)
29a993
 		elif o in ("-N", "--nohz_full"):
29a993
 			try:
29a993
-- 
29a993
2.4.11
29a993