Moved install-spack to its own simpler command.

This commit is contained in:
Todd Gamblin
2013-03-25 15:27:28 -07:00
parent b224d249bb
commit e1551de976
3 changed files with 53 additions and 64 deletions

View File

@@ -25,6 +25,10 @@ def null_op(*args):
pass
def get_cmd_function_name(name):
return name.replace("-", "_")
def get_module(name):
"""Imports the module for a particular command name and returns it."""
module_name = "%s.%s" % (__name__, name)
@@ -35,13 +39,14 @@ def get_module(name):
attr.setdefault(module, SETUP_PARSER, null_op)
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'."
% (module.__name__, module.__file__, name))
% (module.__name__, module.__file__, fn_name))
return module
def get_command(name):
"""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))

View 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)