tools, scripts: refactor error-out statements of Python scripts
authorMasahiro Yamada <yamada.m@jp.panasonic.com>
Fri, 15 Aug 2014 15:59:26 +0000 (00:59 +0900)
committerTom Rini <trini@ti.com>
Thu, 21 Aug 2014 16:01:11 +0000 (12:01 -0400)
In Python, sys.exit() function can also take an object other
than an integer.

If an integer is given to the argument, Python exits with the return
code of it.  If a non-integer argument is given, Python outputs it
to stderr and exits with the return code of 1.

That means,

    print >> sys.stderr, "Blah Blah"
    sys.exit(1)

is equivalent to

    sys.exit("Blah Blah")

The latter is a useful shorthand.

Note:
Some error messages in Buildman and Patman were output to stdout.
But they should go to stderr.  They are also fixed by this commit.
This is a nice side effect.

Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
scripts/mailmapper
scripts/multiconfig.py
tools/buildman/control.py
tools/genboardscfg.py
tools/patman/checkpatch.py
tools/patman/patman.py

index dd1ddf6a712fd424942bf7ffb56d17587bc12dfb..922ada6f5fb2ad7f251ce2cb09370b1a04591387 100755 (executable)
@@ -59,8 +59,7 @@ MIN_COMMITS = 50
 try:
     toplevel = subprocess.check_output(['git', 'rev-parse', '--show-toplevel'])
 except subprocess.CalledProcessError:
-    print >> sys.stderr, 'Please run in a git repository.'
-    sys.exit(1)
+    sys.exit('Please run in a git repository.')
 
 # strip '\n'
 toplevel = toplevel.rstrip()
index 749abcb7a51e7dab35114fa784aefe5b81bfe4ed..69a470e51faa8093d4c78304088f8da1244943c8 100755 (executable)
@@ -194,11 +194,6 @@ def rmdirs(*dirs):
                exception.errno != errno.ENOTEMPTY:
                 raise
 
-def error(msg):
-    """Output the given argument to stderr and exit with return code 1."""
-    print >> sys.stderr, msg
-    sys.exit(1)
-
 def run_command(command, callback_on_error=None):
     """Run the given command in a sub-shell (and exit if it fails).
 
@@ -211,7 +206,7 @@ def run_command(command, callback_on_error=None):
     if retcode:
         if callback_on_error:
             callback_on_error()
-        error("'%s' Failed" % command)
+        sys.exit("'%s' Failed" % command)
 
 def run_make_config(cmd, objdir, callback_on_error=None):
     """Run the make command in a sub-shell (and exit if it fails).
index 98a07a29e7e218365e1314801e4fecc91838ee3a..d98e50ac1f74619e32a036097c2da3c3d588a3d4 100644 (file)
@@ -110,15 +110,13 @@ def DoBuildman(options, args):
             if count is None:
                 str = ("Branch '%s' not found or has no upstream" %
                        options.branch)
-                print col.Color(col.RED, str)
-                sys.exit(1)
+                sys.exit(col.Color(col.RED, str))
             count += 1   # Build upstream commit also
 
     if not count:
         str = ("No commits found to process in branch '%s': "
                "set branch's upstream or use -c flag" % options.branch)
-        print col.Color(col.RED, str)
-        sys.exit(1)
+        sys.exit(col.Color(col.RED, str))
 
     # Work out what subset of the boards we are building
     board_file = os.path.join(options.git, 'boards.cfg')
@@ -127,16 +125,14 @@ def DoBuildman(options, args):
         status = subprocess.call([os.path.join(options.git,
                                                'tools/genboardscfg.py')])
         if status != 0:
-            print >> sys.stderr, "Failed to generate boards.cfg"
-            sys.exit(1)
+            sys.exit("Failed to generate boards.cfg")
 
     boards = board.Boards()
     boards.ReadBoards(os.path.join(options.git, 'boards.cfg'))
     why_selected = boards.SelectBoards(args)
     selected = boards.GetSelected()
     if not len(selected):
-        print col.Color(col.RED, 'No matching boards found')
-        sys.exit(1)
+        sys.exit(col.Color(col.RED, 'No matching boards found'))
 
     # Read the metadata from the commits. First look at the upstream commit,
     # then the ones in the branch. We would like to do something like
@@ -182,8 +178,7 @@ def DoBuildman(options, args):
     gnu_make = command.Output(os.path.join(options.git,
                                            'scripts/show-gnu-make')).rstrip()
     if not gnu_make:
-        print >> sys.stderr, 'GNU Make not found'
-        sys.exit(1)
+        sys.exit('GNU Make not found')
 
     # Create a new builder with the selected options
     if options.branch:
index 734d90b5e58ad0c16993490d1a1755e7dc8dcddc..99e4e872fc483d3f4ffcad994b4eb2a97cf5b23c 100755 (executable)
@@ -77,16 +77,14 @@ def check_top_directory():
     """Exit if we are not at the top of source directory."""
     for f in ('README', 'Licenses'):
         if not os.path.exists(f):
-            print >> sys.stderr, 'Please run at the top of source directory.'
-            sys.exit(1)
+            sys.exit('Please run at the top of source directory.')
 
 def get_make_cmd():
     """Get the command name of GNU Make."""
     process = subprocess.Popen([SHOW_GNU_MAKE], stdout=subprocess.PIPE)
     ret = process.communicate()
     if process.returncode:
-        print >> sys.stderr, 'GNU Make not found'
-        sys.exit(1)
+        sys.exit('GNU Make not found')
     return ret[0].rstrip()
 
 ### classes ###
@@ -209,9 +207,7 @@ class DotConfigParser:
         # sanity check of '.config' file
         for field in self.must_fields:
             if not field in fields:
-                print >> sys.stderr, 'Error: %s is not defined in %s' % \
-                                                            (field, defconfig)
-                sys.exit(1)
+                sys.exit('Error: %s is not defined in %s' % (field, defconfig))
 
         # fix-up for aarch64 and tegra
         if fields['arch'] == 'arm' and 'cpu' in fields:
@@ -455,8 +451,7 @@ def __gen_boards_cfg(jobs):
     # wait until the reformat tool finishes
     reformat_process.communicate()
     if reformat_process.returncode != 0:
-        print >> sys.stderr, '"%s" failed' % REFORMAT_CMD[0]
-        sys.exit(1)
+        sys.exit('"%s" failed' % REFORMAT_CMD[0])
 
 def gen_boards_cfg(jobs):
     """Generate boards.cfg file.
@@ -489,8 +484,7 @@ def main():
         try:
             jobs = int(options.jobs)
         except ValueError:
-            print >> sys.stderr, 'Option -j (--jobs) takes a number'
-            sys.exit(1)
+            sys.exit('Option -j (--jobs) takes a number')
     else:
         try:
             jobs = int(subprocess.Popen(['getconf', '_NPROCESSORS_ONLN'],
index 0d4e9352447065eae7555590e66f7c54fb4ab4c5..34a3bd22b08d274b665d2fcf4c47fd17629a92dc 100644 (file)
@@ -34,9 +34,8 @@ def FindCheckPatch():
             return fname
         path = os.path.dirname(path)
 
-    print >> sys.stderr, ('Cannot find checkpatch.pl - please put it in your ' +
-                '~/bin directory or use --no-check')
-    sys.exit(1)
+    sys.exit('Cannot find checkpatch.pl - please put it in your ' +
+             '~/bin directory or use --no-check')
 
 def CheckPatch(fname, verbose=False):
     """Run checkpatch.pl on a file.
index c60aa5a1c4560e78fbaed1fc1535f83a7b3e89c3..ba5dc91315bf09fa482a8951c39ebeef265f85a9 100755 (executable)
@@ -122,8 +122,7 @@ else:
     col = terminal.Color()
     if not options.count:
         str = 'No commits found to process - please use -c flag'
-        print col.Color(col.RED, str)
-        sys.exit(1)
+        sys.exit(col.Color(col.RED, str))
 
     # Read the metadata from the commits
     if options.count: