Skip to content

Commit 69de8be

Browse files
committed
Consider triplet for eager processing of ci exclusions
1 parent 7017bac commit 69de8be

File tree

1 file changed

+30
-13
lines changed

1 file changed

+30
-13
lines changed

src/vcpkg/commands.ci.cpp

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,27 @@ namespace
8484
}
8585

8686
bool cascade_for_triplet(const std::vector<InstallPlanAction>& install_actions,
87-
const SortedVector<std::string>* triplet_exclusions)
87+
const Triplet& target_triplet,
88+
const SortedVector<std::string>* target_triplet_exclusions,
89+
const Triplet& host_triplet,
90+
const SortedVector<std::string>* host_triplet_exclusions)
8891
{
89-
if (!triplet_exclusions) return false;
92+
return std::any_of(install_actions.begin(), install_actions.end(), [&](const InstallPlanAction& action) {
93+
if (target_triplet_exclusions && action.spec.triplet() == target_triplet)
94+
return target_triplet_exclusions->contains(action.spec.name());
95+
if (host_triplet_exclusions && action.spec.triplet() == host_triplet)
96+
return host_triplet_exclusions->contains(action.spec.name());
97+
return false;
98+
});
99+
}
90100

91-
return std::any_of(
92-
install_actions.begin(), install_actions.end(), [triplet_exclusions](const InstallPlanAction& action) {
93-
return triplet_exclusions->contains(action.spec.name());
94-
});
101+
const SortedVector<std::string>* find_triplet_exclusions(const ExclusionsMap& exclusions_map,
102+
const Triplet& triplet)
103+
{
104+
auto it = Util::find_if(exclusions_map.triplets, [&triplet](const TripletExclusions& exclusions) {
105+
return exclusions.triplet == triplet;
106+
});
107+
return it == exclusions_map.triplets.end() ? nullptr : &it->exclusions;
95108
}
96109

97110
ActionPlan compute_full_plan(const VcpkgPaths& paths,
@@ -310,6 +323,7 @@ namespace
310323

311324
CiSpecsResult calculate_ci_specs(const ExclusionsMap& exclusions_map,
312325
const Triplet& target_triplet,
326+
const Triplet& host_triplet,
313327
PortFileProvider& provider,
314328
const CMakeVars::CMakeVarProvider& var_provider,
315329
const CreateInstallPlanOptions& serialize_options)
@@ -319,11 +333,10 @@ namespace
319333
// it is too late as we have already calculated an action plan with feature dependencies from
320334
// the skipped ports.
321335
CiSpecsResult result;
322-
auto it = Util::find_if(exclusions_map.triplets, [&](const TripletExclusions& exclusions) {
323-
return exclusions.triplet == target_triplet;
324-
});
325336
const SortedVector<std::string>* const target_triplet_exclusions =
326-
it == exclusions_map.triplets.end() ? nullptr : &it->exclusions;
337+
find_triplet_exclusions(exclusions_map, target_triplet);
338+
const SortedVector<std::string>* const host_triplet_exclusions =
339+
(host_triplet == target_triplet) ? nullptr : find_triplet_exclusions(exclusions_map, host_triplet);
327340
auto all_control_files = provider.load_all_control_files();
328341

329342
// populate `var_provider` to evaluate supports expressions for all ports:
@@ -355,7 +368,11 @@ namespace
355368
continue;
356369
}
357370

358-
if (cascade_for_triplet(action_plan.install_actions, target_triplet_exclusions))
371+
if (cascade_for_triplet(action_plan.install_actions,
372+
target_triplet,
373+
target_triplet_exclusions,
374+
host_triplet,
375+
host_triplet_exclusions))
359376
{
360377
result.excluded.insert_or_assign(std::move(full_package_spec.package_spec), ExcludeReason::Cascade);
361378
continue;
@@ -504,8 +521,8 @@ namespace vcpkg
504521
}
505522
CreateInstallPlanOptions create_install_plan_options(
506523
randomizer.get(), host_triplet, UnsupportedPortAction::Warn, UseHeadVersion::No, Editable::No);
507-
auto ci_specs =
508-
calculate_ci_specs(exclusions_map, target_triplet, provider, var_provider, create_install_plan_options);
524+
auto ci_specs = calculate_ci_specs(
525+
exclusions_map, target_triplet, host_triplet, provider, var_provider, create_install_plan_options);
509526

510527
PackagesDirAssigner packages_dir_assigner{paths.packages()};
511528
auto action_plan = compute_full_plan(

0 commit comments

Comments
 (0)