find_unment_dependencies() now works for a single package

This commit is contained in:
Alexander Karatarakis 2016-09-23 12:06:55 -07:00
parent 0b59e6c0fb
commit b2f6a769ea
3 changed files with 8 additions and 12 deletions

View File

@ -9,5 +9,5 @@ namespace vcpkg {namespace Dependencies
{
std::vector<package_spec> create_dependency_ordered_install_plan(const vcpkg_paths& paths, const std::vector<package_spec>& specs, const StatusParagraphs& status_db);
std::unordered_set<package_spec> find_unmet_dependencies(const vcpkg_paths& paths, const std::vector<package_spec>& specs, const StatusParagraphs& status_db);
std::unordered_set<package_spec> find_unmet_dependencies(const vcpkg_paths& paths, const package_spec& spec, const StatusParagraphs& status_db);
}}

View File

@ -113,14 +113,14 @@ namespace vcpkg
void build_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet)
{
// Currently the code won't work for multiple packages if one of them depends on another.
// Installing multiple packages leads to unintuitive behavior if one of them depends on another.
// Allowing only 1 package for now.
args.check_max_args(1);
StatusParagraphs status_db = database_load_check(paths);
std::vector<package_spec> specs = args.parse_all_arguments_as_package_specs(default_target_triplet);
std::unordered_set<package_spec> unmet_dependencies = Dependencies::find_unmet_dependencies(paths, specs, status_db);
const package_spec spec = args.parse_all_arguments_as_package_specs(default_target_triplet).at(0);
std::unordered_set<package_spec> unmet_dependencies = Dependencies::find_unmet_dependencies(paths, spec, status_db);
if (!unmet_dependencies.empty())
{
System::println(System::color::error, "The build command requires all dependencies to be already installed.");
@ -135,10 +135,7 @@ namespace vcpkg
}
Environment::ensure_utilities_on_path(paths);
for (const package_spec& spec : specs)
{
build_internal(spec, paths);
}
build_internal(spec, paths);
exit(EXIT_SUCCESS);
}

View File

@ -57,12 +57,11 @@ namespace vcpkg { namespace Dependencies
return build_dependency_graph(paths, specs, status_db).find_topological_sort();
}
std::unordered_set<package_spec> find_unmet_dependencies(const vcpkg_paths& paths, const std::vector<package_spec>& specs, const StatusParagraphs& status_db)
std::unordered_set<package_spec> find_unmet_dependencies(const vcpkg_paths& paths, const package_spec& spec, const StatusParagraphs& status_db)
{
const Graphs::Graph<package_spec> dependency_graph = build_dependency_graph(paths, specs, status_db);
const Graphs::Graph<package_spec> dependency_graph = build_dependency_graph(paths, {spec}, status_db);
std::unordered_set<package_spec> key_set = Maps::extract_key_set(dependency_graph.adjacency_list());
Sets::remove_all(&key_set, specs);
key_set.erase(spec);
return key_set;
}
}}