Add profile option to spack script.
This commit is contained in:
parent
457f2d1d51
commit
93067d0d63
83
bin/spack
83
bin/spack
@ -58,14 +58,16 @@ parser = argparse.ArgumentParser(
|
|||||||
description='Spack: the Supercomputing PACKage Manager.')
|
description='Spack: the Supercomputing PACKage Manager.')
|
||||||
parser.add_argument('-V', '--version', action='version',
|
parser.add_argument('-V', '--version', action='version',
|
||||||
version="%s" % spack.spack_version)
|
version="%s" % spack.spack_version)
|
||||||
parser.add_argument('-v', '--verbose', action='store_true', dest='verbose',
|
parser.add_argument('-v', '--verbose', action='store_true',
|
||||||
help="Print additional output during builds")
|
help="Print additional output during builds")
|
||||||
parser.add_argument('-d', '--debug', action='store_true', dest='debug',
|
parser.add_argument('-d', '--debug', action='store_true',
|
||||||
help="Write out debug logs during compile")
|
help="Write out debug logs during compile")
|
||||||
parser.add_argument('-k', '--insecure', action='store_true', dest='insecure',
|
parser.add_argument('-k', '--insecure', action='store_true',
|
||||||
help="Do not check ssl certificates when downloading archives.")
|
help="Do not check ssl certificates when downloading archives.")
|
||||||
parser.add_argument('-m', '--mock', action='store_true', dest='mock',
|
parser.add_argument('-m', '--mock', action='store_true',
|
||||||
help="Use mock packages instead of real ones.")
|
help="Use mock packages instead of real ones.")
|
||||||
|
parser.add_argument('-p', '--profile', action='store_true',
|
||||||
|
help="Profile execution using cProfile.")
|
||||||
|
|
||||||
# each command module implements a parser() function, to which we pass its
|
# each command module implements a parser() function, to which we pass its
|
||||||
# subparser for setup.
|
# subparser for setup.
|
||||||
@ -85,42 +87,49 @@ if len(sys.argv) == 1:
|
|||||||
# actually parse the args.
|
# actually parse the args.
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
# Set up environment based on args.
|
def main():
|
||||||
tty.set_verbose(args.verbose)
|
# Set up environment based on args.
|
||||||
tty.set_debug(args.debug)
|
tty.set_verbose(args.verbose)
|
||||||
spack.debug = args.debug
|
tty.set_debug(args.debug)
|
||||||
|
spack.debug = args.debug
|
||||||
|
|
||||||
spack.spack_working_dir = working_dir
|
spack.spack_working_dir = working_dir
|
||||||
if args.mock:
|
if args.mock:
|
||||||
from spack.packages import PackageDB
|
from spack.packages import PackageDB
|
||||||
spack.db = PackageDB(spack.mock_packages_path)
|
spack.db = PackageDB(spack.mock_packages_path)
|
||||||
|
|
||||||
# If the user asked for it, don't check ssl certs.
|
# If the user asked for it, don't check ssl certs.
|
||||||
if args.insecure:
|
if args.insecure:
|
||||||
tty.warn("You asked for --insecure, which does not check SSL certificates or checksums.")
|
tty.warn("You asked for --insecure, which does not check SSL certificates or checksums.")
|
||||||
spack.curl.add_default_arg('-k')
|
spack.curl.add_default_arg('-k')
|
||||||
|
|
||||||
# Try to load the particular command asked for and run it
|
# Try to load the particular command asked for and run it
|
||||||
command = spack.cmd.get_command(args.command)
|
command = spack.cmd.get_command(args.command)
|
||||||
try:
|
try:
|
||||||
return_val = command(parser, args)
|
return_val = command(parser, args)
|
||||||
except SpackError, e:
|
except SpackError, e:
|
||||||
if spack.debug:
|
if spack.debug:
|
||||||
# In debug mode, raise with a full stack trace.
|
# In debug mode, raise with a full stack trace.
|
||||||
raise
|
raise
|
||||||
elif e.long_message:
|
elif e.long_message:
|
||||||
tty.die(e.message, e.long_message)
|
tty.die(e.message, e.long_message)
|
||||||
|
else:
|
||||||
|
tty.die(e.message)
|
||||||
|
|
||||||
|
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:
|
else:
|
||||||
tty.die(e.message)
|
tty.die("Bad return value from command %s: %s" % (args.command, return_val))
|
||||||
|
|
||||||
except KeyboardInterrupt:
|
if args.profile:
|
||||||
sys.stderr.write('\n')
|
import cProfile
|
||||||
tty.die("Keyboard interrupt.")
|
cProfile.run('main()', sort='tottime')
|
||||||
|
|
||||||
# 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:
|
else:
|
||||||
tty.die("Bad return value from command %s: %s" % (args.command, return_val))
|
main()
|
||||||
|
Loading…
Reference in New Issue
Block a user