def save_spec_yamls(args): """Get full spec for dependencies, relative to root spec, and write them to files in the specified output directory. Uses exit code to signal success or failure. An exit code of zero means the command was likely successful. If any errors or exceptions are encountered, or if expected command-line arguments are not provided, then the exit code will be non-zero.""" if not args.root_spec and not args.root_spec_yaml: tty.msg('No root spec provided, exiting.') sys.exit(1) if not args.specs: tty.msg('No dependent specs provided, exiting.') sys.exit(1) if not args.yaml_dir: tty.msg('No yaml directory provided, exiting.') sys.exit(1) if args.root_spec_yaml: with open(args.root_spec_yaml) as fd: root_spec_as_yaml = fd.read() else: root_spec = Spec(args.root_spec) root_spec.concretize() root_spec_as_yaml = root_spec.to_yaml(hash=ht.build_hash) save_dependency_spec_yamls(root_spec_as_yaml, args.yaml_dir, args.specs.split()) sys.exit(0)
def test_save_dependency_spec_yamls_subset(tmpdir, config): output_path = str(tmpdir.mkdir('spec_yamls')) default = ('build', 'link') mock_repo = MockPackageMultiRepo() g = mock_repo.add_package('g', [], []) f = mock_repo.add_package('f', [], []) e = mock_repo.add_package('e', [], []) d = mock_repo.add_package('d', [f, g], [default, default]) c = mock_repo.add_package('c', [], []) b = mock_repo.add_package('b', [d, e], [default, default]) mock_repo.add_package('a', [b, c], [default, default]) with repo.use_repositories(mock_repo): spec_a = Spec('a') spec_a.concretize() b_spec = spec_a['b'] c_spec = spec_a['c'] spec_a_yaml = spec_a.to_yaml(hash=ht.build_hash) save_dependency_spec_yamls(spec_a_yaml, output_path, ['b', 'c']) assert check_specs_equal(b_spec, os.path.join(output_path, 'b.yaml')) assert check_specs_equal(c_spec, os.path.join(output_path, 'c.yaml'))