Moved install-spack to its own simpler command.
This commit is contained in:
		| @@ -1,61 +0,0 @@ | |||||||
| #!/usr/bin/python |  | ||||||
| usage="""\ |  | ||||||
| This script installs spack in a new prefix. |  | ||||||
| To use: cd to the prefix and execute this script. |  | ||||||
| """ |  | ||||||
| import os |  | ||||||
| import sys |  | ||||||
| import getpass |  | ||||||
| from subprocess import check_call |  | ||||||
|  |  | ||||||
| def escape(s): |  | ||||||
|     """Returns a TTY escape code if stdout is a tty, otherwise empty string""" |  | ||||||
|     if sys.stdout.isatty(): |  | ||||||
|         return "\033[{}m".format(s) |  | ||||||
|     return '' |  | ||||||
|  |  | ||||||
| def bold(n): |  | ||||||
|     return escape("1;{}".format(n)) |  | ||||||
|  |  | ||||||
| blue   = bold(34) |  | ||||||
| red    = bold(31) |  | ||||||
| white  = bold(39) |  | ||||||
| reset  = escape(0) |  | ||||||
|  |  | ||||||
| def msg(msg): |  | ||||||
|     print "{}==>{} {}{}".format(blue, white, str(msg), reset) |  | ||||||
|  |  | ||||||
| def error(msg): |  | ||||||
|     print "{}==> ERROR: {} {}{}".format(red, white, str(msg), reset) |  | ||||||
|     sys.exit(1) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| user = getpass.getuser() |  | ||||||
| if not user: |  | ||||||
|     error("Couldn't determine username!") |  | ||||||
|  |  | ||||||
| spack_repo  = "https://%s@lc.llnl.gov/stash/scm/SCALE/spack.git" % user |  | ||||||
| msg("Fetching spack from %s" % spack_repo) |  | ||||||
|  |  | ||||||
| prefix = os.getcwd() |  | ||||||
|  |  | ||||||
| if os.path.exists(".git"): |  | ||||||
|     error("There already seems to be a git repository here.") |  | ||||||
|  |  | ||||||
| files_in_the_way = os.listdir(".") |  | ||||||
| if files_in_the_way: |  | ||||||
|     msg("There are already some files in this directory:") |  | ||||||
|     for file in files_in_the_way: |  | ||||||
|         print file |  | ||||||
|     error("Delete these files before installing spack.") |  | ||||||
|  |  | ||||||
| msg("This script will install:") |  | ||||||
| print "    %s/bin/spack" % prefix |  | ||||||
| print "    %s/lib/spack/..." % prefix |  | ||||||
|  |  | ||||||
| check_call(["git", "init", "--shared", "-q"]) |  | ||||||
| check_call(["git", "remote", "add", "origin", spack_repo]) |  | ||||||
| check_call(["git", "fetch", "origin", "master:refs/remotes/origin/master", "-n", "-q"]) |  | ||||||
| check_call(["git", "reset", "--hard", "origin/master", "-q"]) |  | ||||||
|  |  | ||||||
| msg("Successfully installed spack in %s" % prefix) |  | ||||||
| @@ -25,6 +25,10 @@ def null_op(*args): | |||||||
|     pass |     pass | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def get_cmd_function_name(name): | ||||||
|  |     return name.replace("-", "_") | ||||||
|  |  | ||||||
|  |  | ||||||
| def get_module(name): | def get_module(name): | ||||||
|     """Imports the module for a particular command name and returns it.""" |     """Imports the module for a particular command name and returns it.""" | ||||||
|     module_name = "%s.%s" % (__name__, name) |     module_name = "%s.%s" % (__name__, name) | ||||||
| @@ -35,13 +39,14 @@ def get_module(name): | |||||||
|     attr.setdefault(module, SETUP_PARSER, null_op) |     attr.setdefault(module, SETUP_PARSER, null_op) | ||||||
|     attr.setdefault(module, DESCRIPTION, "") |     attr.setdefault(module, DESCRIPTION, "") | ||||||
|  |  | ||||||
|     if not hasattr(module, name): |     fn_name = get_cmd_function_name(name) | ||||||
|  |     if not hasattr(module, fn_name): | ||||||
|         tty.die("Command module %s (%s) must define function '%s'." |         tty.die("Command module %s (%s) must define function '%s'." | ||||||
|                 % (module.__name__, module.__file__, name)) |                 % (module.__name__, module.__file__, fn_name)) | ||||||
|  |  | ||||||
|     return module |     return module | ||||||
|  |  | ||||||
|  |  | ||||||
| def get_command(name): | def get_command(name): | ||||||
|     """Imports the command's function from a module and returns it.""" |     """Imports the command's function from a module and returns it.""" | ||||||
|     return getattr(get_module(name), name) |     return getattr(get_module(name), get_cmd_function_name(name)) | ||||||
|   | |||||||
							
								
								
									
										45
									
								
								lib/spack/spack/cmd/install-spack.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								lib/spack/spack/cmd/install-spack.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | |||||||
|  | import os | ||||||
|  | from subprocess import check_call, check_output | ||||||
|  | import spack | ||||||
|  | from spack import new_path | ||||||
|  | import spack.tty as tty | ||||||
|  |  | ||||||
|  | description = "Create a new installation of spack in another prefix" | ||||||
|  |  | ||||||
|  | def setup_parser(subparser): | ||||||
|  |     subparser.add_argument('prefix', help="names of prefix where we should install spack") | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def get_origin_url(): | ||||||
|  |     git_dir = new_path(spack.prefix, '.git') | ||||||
|  |     origin_url = check_output( | ||||||
|  |         ['git', '--git-dir=%s' % git_dir, 'config', '--get', 'remote.origin.url']) | ||||||
|  |     return origin_url.strip() | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def install_spack(parser, args): | ||||||
|  |     origin_url = get_origin_url() | ||||||
|  |     prefix = args.prefix | ||||||
|  |  | ||||||
|  |     tty.msg("Fetching spack from origin: %s" % origin_url) | ||||||
|  |  | ||||||
|  |     if os.path.exists(new_path(prefix, '.git')): | ||||||
|  |         tty.die("There already seems to be a git repository in %s" % prefix) | ||||||
|  |  | ||||||
|  |     files_in_the_way = os.listdir(prefix) | ||||||
|  |     if files_in_the_way: | ||||||
|  |         tty.die("There are already files there!  Delete these files before installing spack.", | ||||||
|  |                 *files_in_the_way) | ||||||
|  |  | ||||||
|  |     tty.msg("Installing:", | ||||||
|  |             "%s/bin/spack" % prefix, | ||||||
|  |             "%s/lib/spack/..." % prefix) | ||||||
|  |  | ||||||
|  |     os.chdir(prefix) | ||||||
|  |     check_call(['git', 'init', '--shared', '-q']) | ||||||
|  |     check_call(['git', 'remote', 'add', 'origin', origin_url]) | ||||||
|  |     check_call(['git', 'fetch', 'origin', 'master:refs/remotes/origin/master', '-n', '-q']) | ||||||
|  |     check_call(['git', 'reset', '--hard', 'origin/master', '-q']) | ||||||
|  |  | ||||||
|  |     tty.msg("Successfully installed spack in %s" % prefix, | ||||||
|  |             "Run %s/bin/spack to use this installation." % prefix) | ||||||
		Reference in New Issue
	
	Block a user
	 Todd Gamblin
					Todd Gamblin