Resolve dependencies through the repositories the packages filter dropped

A partial build (`satis build satis.json web/ vendor/package`) narrows the
repository list down to the ones providing the requested packages. The
dependency pass then reused that narrowed list, so with
`require-dependencies` nothing the filtered package required could be
found -- packagist.org and every other repository had already been
dropped. Feed the dependency repository set the repositories the filter
removed, the same way the repository-URL filter already does.

Fixes #706
This commit is contained in:
dualfroz committed 2026-09-13 15:08:58 +02:00
1 parent 1a8cdb80c2
commit 8e2a075614
2 files changed
+56 -11

No files matched your search

+11 -3
View File
@@ -221,12 +221,17 @@ class PackageSelection
}
}
if ($this->hasFilterForPackages()) {
$repos = $this->filterPackages($repos);
$reposDroppedByPackagesFilter = [];
if (0 === count($repos)) {
if ($this->hasFilterForPackages()) {
$filteredRepos = $this->filterPackages($repos);
if (0 === count($filteredRepos)) {
throw new \InvalidArgumentException(sprintf('Could not find any repositories config with "name" matching your package(s) filter: %s', implode(', ', $this->packagesFilter)));
}
$reposDroppedByPackagesFilter = array_filter($repos, static fn ($repo) => !in_array($repo, $filteredRepos, true));
$repos = $filteredRepos;
}
$repositorySet = new RepositorySet($this->minimumStability, $stabilityFlags);
@@ -253,6 +258,9 @@ class PackageSelection
);
}
// the packages filter picks what to request, not who may answer a dependency
$this->addRepositories($repositorySet, $reposDroppedByPackagesFilter);
// additional repositories for dependencies
if (!$this->hasRepositoriesFilter() || true !== $this->repositoryFilterDep) {
$this->addRepositories($repositorySet, $this->getDepRepos($composer));