def test_dump_environment(prepare_environment_for_tests, tmpdir): test_paths = '/a:/b/x:/b/c' os.environ['TEST_ENV_VAR'] = test_paths dumpfile_path = str(tmpdir.join('envdump.txt')) envutil.dump_environment(dumpfile_path) with open(dumpfile_path, 'r') as dumpfile: assert('TEST_ENV_VAR={0}; export TEST_ENV_VAR\n'.format(test_paths) in list(dumpfile))
def create_env_files(env_dir, environment): filesystem.mkdirp(env_dir) # Write a human-readable file. with open(os.path.join(env_dir, 'env.txt'), 'w') as outfile: for var, value in sorted(environment.iteritems()): outfile.write('{0}={1}\n'.format(var, value)) # Write a source-able file. dump_environment(os.path.join(env_dir, 'env.sh'), environment) # Write a pickled file. pickle_environment(os.path.join(env_dir, 'env.pickle'), environment)
def emulate_env_utility(cmd_name, context, args): if not args.spec: tty.die("spack %s requires a spec." % cmd_name) # Specs may have spaces in them, so if they do, require that the # caller put a '--' between the spec and the command to be # executed. If there is no '--', assume that the spec is the # first argument. sep = '--' if sep in args.spec: s = args.spec.index(sep) spec = args.spec[:s] cmd = args.spec[s + 1:] else: spec = args.spec[0] cmd = args.spec[1:] if not spec: tty.die("spack %s requires a spec." % cmd_name) specs = spack.cmd.parse_specs(spec, concretize=False) if len(specs) > 1: tty.die("spack %s only takes one spec." % cmd_name) spec = specs[0] spec = spack.cmd.matching_spec_from_env(spec) build_environment.setup_package(spec.package, args.dirty, context) if args.dump: # Dump a source-able environment to a text file. tty.msg("Dumping a source-able environment to {0}".format(args.dump)) dump_environment(args.dump) if args.pickle: # Dump a source-able environment to a pickle file. tty.msg("Pickling a source-able environment to {0}".format( args.pickle)) pickle_environment(args.pickle) if cmd: # Execute the command with the new environment os.execvp(cmd[0], cmd) elif not bool(args.pickle or args.dump): # If no command or dump/pickle option then act like the "env" command # and print out env vars. for key, val in os.environ.items(): print("%s=%s" % (key, val))