From 935eba23579af1d64e56fea38ab981846e127645 Mon Sep 17 00:00:00 2001
From: Todd Gamblin <tgamblin@llnl.gov>
Date: Mon, 5 Jan 2015 02:33:15 -0500
Subject: [PATCH] Allow commands to return error codes.

---
 bin/spack                    | 10 +++++++++-
 lib/spack/spack/cmd/graph.py |  5 +++++
 lib/spack/spack/cmd/md5.py   |  1 +
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/bin/spack b/bin/spack
index b345a5079d..626d9d9d11 100755
--- a/bin/spack
+++ b/bin/spack
@@ -103,7 +103,7 @@ if args.insecure:
 # Try to load the particular command asked for and run it
 command = spack.cmd.get_command(args.command)
 try:
-    command(parser, args)
+    return_val = command(parser, args)
 except SpackError, e:
     if spack.debug:
         # In debug mode, raise with a full stack trace.
@@ -116,3 +116,11 @@ except SpackError, e:
 except KeyboardInterrupt:
     sys.stderr.write('\n')
     tty.die("Keyboard interrupt.")
+
+# Allow commands to return values if they want to exit with some ohter code.
+if return_val is None:
+    sys.exit(0)
+elif isinstance(return_val, int):
+    sys.exit(return_val)
+else:
+    tty.die("Bad return value from command %s: %s" % (args.command, return_val))
diff --git a/lib/spack/spack/cmd/graph.py b/lib/spack/spack/cmd/graph.py
index f8cd18d91f..cb93a1b543 100644
--- a/lib/spack/spack/cmd/graph.py
+++ b/lib/spack/spack/cmd/graph.py
@@ -31,6 +31,8 @@
 description = "Generate graphs of package dependency relationships."
 
 def setup_parser(subparser):
+    setup_parser.parser = subparser
+
     method = subparser.add_mutually_exclusive_group()
     method.add_argument(
         '--ascii', action='store_true',
@@ -50,6 +52,9 @@ def graph(parser, args):
     specs = spack.cmd.parse_specs(
         args.specs, normalize=True, concretize=args.concretize)
 
+    if not specs:
+        setup_parser.parser.print_help()
+        return 1
 
     if args.dot:    # Dot graph only if asked for.
         graph_dot(*specs)
diff --git a/lib/spack/spack/cmd/md5.py b/lib/spack/spack/cmd/md5.py
index 496835c64b..dfa1be412b 100644
--- a/lib/spack/spack/cmd/md5.py
+++ b/lib/spack/spack/cmd/md5.py
@@ -41,6 +41,7 @@ def setup_parser(subparser):
 def md5(parser, args):
     if not args.files:
         setup_parser.parser.print_help()
+        return 1
 
     for f in args.files:
         if not os.path.isfile(f):
-- 
GitLab