def createtarball(args): """create a binary package from an existing install""" if args.spec_yaml: packages = set() tty.msg('createtarball, reading spec from {0}'.format(args.spec_yaml)) with open(args.spec_yaml, 'r') as fd: yaml_text = fd.read() tty.debug('createtarball read spec yaml:') tty.debug(yaml_text) s = Spec.from_yaml(yaml_text) packages.add('/{0}'.format(s.dag_hash())) elif args.packages: packages = args.packages else: tty.die("build cache file creation requires at least one" + " installed package argument or else path to a" + " yaml file containing a spec to install") pkgs = set(packages) specs = set() outdir = '.' if args.directory: outdir = args.directory signkey = None if args.key: signkey = args.key # restrict matching to current environment if one is active env = ev.get_env(args, 'buildcache create') matches = find_matching_specs(pkgs, env=env) if matches: tty.msg('Found at least one matching spec') for match in matches: tty.msg('examining match {0}'.format(match.format())) if match.external or match.virtual: tty.msg('skipping external or virtual spec %s' % match.format()) else: tty.msg('adding matching spec %s' % match.format()) specs.add(match) tty.msg('recursing dependencies') for d, node in match.traverse(order='post', depth=True, deptype=('link', 'run')): if node.external or node.virtual: tty.msg('skipping external or virtual dependency %s' % node.format()) else: tty.msg('adding dependency %s' % node.format()) specs.add(node) tty.msg('writing tarballs to %s/build_cache' % outdir) for spec in specs: tty.msg('creating binary cache file for package %s ' % spec.format()) bindist.build_tarball(spec, outdir, args.force, args.rel, args.unsigned, args.allow_root, signkey, not args.no_rebuild_index)
def createtarball(args): if not args.packages: tty.die("build cache file creation requires at least one" + " installed package argument") pkgs = set(args.packages) specs = set() outdir = os.getcwd() if args.directory: outdir = args.directory signkey = None if args.key: signkey = args.key yes_to_all = False force = False relative = False if args.yes_to_all: yes_to_all = True if args.force: force = True if args.rel: relative = True matches = find_matching_specs(pkgs, False, False) for match in matches: if match.external or match.virtual: tty.msg('skipping external or virtual spec %s' % match.format()) else: tty.msg('adding matching spec %s' % match.format()) specs.add(match) tty.msg('recursing dependencies') for d, node in match.traverse(order='post', depth=True, deptype=('link', 'run')): if node.external or node.virtual: tty.msg('skipping external or virtual dependency %s' % node.format()) else: tty.msg('adding dependency %s' % node.format()) specs.add(node) for spec in specs: tty.msg('creating binary cache file for package %s ' % spec.format()) try: bindist.build_tarball(spec, outdir, force, relative, yes_to_all, signkey) except NoOverwriteException as e: tty.warn("%s exists, use -f to force overwrite." % e) except NoGpgException: tty.die("gpg2 is not available," " use -y to create unsigned build caches") except NoKeyException: tty.die("no default key available for signing," " use -y to create unsigned build caches" " or spack gpg init to create a default key") except PickKeyException: tty.die("multi keys available for signing," " use -y to create unsigned build caches" " or -k <key hash> to pick a key")
def create_single_tarball(spec, outdir, force, relative, unsigned, allow_root, signkey, rebuild_index, catch_exceptions): if isinstance(spec, dict): spec = spack.spec.Spec.from_dict(spec) spec.concretize() tty.msg('creating binary cache file for package %s ' % spec.format()) # use return value dictionary in order to allow for additional return # values in the future retval = {"error": None} try: bindist.build_tarball(spec, outdir, force, relative, unsigned, allow_root, signkey, rebuild_index) except spack.error.SpackError as e: if catch_exceptions: retval["error"] = "Spec %s: %s" % (spec.format(), str(e)) else: # if we are not multiproccessing we can re-raise the exception raise e return retval
def createtarball(args): """create a binary package from an existing install""" if not args.packages: tty.die("build cache file creation requires at least one" + " installed package argument") pkgs = set(args.packages) specs = set() outdir = '.' if args.directory: outdir = args.directory signkey = None if args.key: signkey = args.key matches = find_matching_specs(pkgs, False, False) for match in matches: if match.external or match.virtual: tty.msg('skipping external or virtual spec %s' % match.format()) else: tty.msg('adding matching spec %s' % match.format()) specs.add(match) tty.msg('recursing dependencies') for d, node in match.traverse(order='post', depth=True, deptype=('link', 'run')): if node.external or node.virtual: tty.msg('skipping external or virtual dependency %s' % node.format()) else: tty.msg('adding dependency %s' % node.format()) specs.add(node) tty.msg('writing tarballs to %s/build_cache' % outdir) for spec in specs: tty.msg('creating binary cache file for package %s ' % spec.format()) bindist.build_tarball(spec, outdir, args.force, args.rel, args.unsigned, args.allow_root, signkey)
def _createtarball(env, spec_yaml=None, packages=None, add_spec=True, add_deps=True, output_location=os.getcwd(), signing_key=None, force=False, make_relative=False, unsigned=False, allow_root=False, rebuild_index=False): if spec_yaml: with open(spec_yaml, 'r') as fd: yaml_text = fd.read() tty.debug('createtarball read spec yaml:') tty.debug(yaml_text) s = Spec.from_yaml(yaml_text) package = '/{0}'.format(s.dag_hash()) matches = find_matching_specs(package, env=env) elif packages: matches = find_matching_specs(packages, env=env) elif env: matches = [env.specs_by_hash[h] for h in env.concretized_order] else: tty.die("build cache file creation requires at least one" + " installed package spec, an active environment," + " or else a path to a yaml file containing a spec" + " to install") specs = set() mirror = spack.mirror.MirrorCollection().lookup(output_location) outdir = url_util.format(mirror.push_url) msg = 'Buildcache files will be output to %s/build_cache' % outdir tty.msg(msg) if matches: tty.debug('Found at least one matching spec') for match in matches: tty.debug('examining match {0}'.format(match.format())) if match.external or match.virtual: tty.debug('skipping external or virtual spec %s' % match.format()) else: lookup = spack.store.db.query_one(match) if not add_spec: tty.debug('skipping matching root spec %s' % match.format()) elif lookup is None: tty.debug('skipping uninstalled matching spec %s' % match.format()) else: tty.debug('adding matching spec %s' % match.format()) specs.add(match) if not add_deps: continue tty.debug('recursing dependencies') for d, node in match.traverse(order='post', depth=True, deptype=('link', 'run')): # skip root, since it's handled above if d == 0: continue lookup = spack.store.db.query_one(node) if node.external or node.virtual: tty.debug('skipping external or virtual dependency %s' % node.format()) elif lookup is None: tty.debug('skipping uninstalled depenendency %s' % node.format()) else: tty.debug('adding dependency %s' % node.format()) specs.add(node) tty.debug('writing tarballs to %s/build_cache' % outdir) for spec in specs: tty.debug('creating binary cache file for package %s ' % spec.format()) try: bindist.build_tarball(spec, outdir, force, make_relative, unsigned, allow_root, signing_key, rebuild_index) except bindist.NoOverwriteException as e: tty.warn(e)
def _createtarball(env, spec_yaml, packages, directory, key, no_deps, force, rel, unsigned, allow_root, no_rebuild_index): if spec_yaml: packages = set() with open(spec_yaml, 'r') as fd: yaml_text = fd.read() tty.debug('createtarball read spec yaml:') tty.debug(yaml_text) s = Spec.from_yaml(yaml_text) packages.add('/{0}'.format(s.dag_hash())) elif packages: packages = packages else: tty.die("build cache file creation requires at least one" + " installed package argument or else path to a" + " yaml file containing a spec to install") pkgs = set(packages) specs = set() outdir = '.' if directory: outdir = directory mirror = spack.mirror.MirrorCollection().lookup(outdir) outdir = url_util.format(mirror.push_url) signkey = None if key: signkey = key matches = find_matching_specs(pkgs, env=env) if matches: tty.debug('Found at least one matching spec') for match in matches: tty.debug('examining match {0}'.format(match.format())) if match.external or match.virtual: tty.debug('skipping external or virtual spec %s' % match.format()) else: tty.debug('adding matching spec %s' % match.format()) specs.add(match) if no_deps is True: continue tty.debug('recursing dependencies') for d, node in match.traverse(order='post', depth=True, deptype=('link', 'run')): if node.external or node.virtual: tty.debug('skipping external or virtual dependency %s' % node.format()) else: tty.debug('adding dependency %s' % node.format()) specs.add(node) tty.debug('writing tarballs to %s/build_cache' % outdir) for spec in specs: tty.msg('creating binary cache file for package %s ' % spec.format()) try: bindist.build_tarball(spec, outdir, force, rel, unsigned, allow_root, signkey, not no_rebuild_index) except Exception as e: tty.warn('%s' % e) pass