function ArchivableFilesFinder::__construct
Initializes the internal Symfony Finder with appropriate filters
Parameters
string $sources Path to source files to be archived:
string[] $excludes Composer's own exclude rules from composer.json:
bool $ignoreFilters Ignore filters when looking for files:
File
-
vendor/
composer/ composer/ src/ Composer/ Package/ Archiver/ ArchivableFilesFinder.php, line 46
Class
- ArchivableFilesFinder
- A Symfony Finder wrapper which locates files that should go into archives
Namespace
Composer\Package\ArchiverCode
public function __construct(string $sources, array $excludes, bool $ignoreFilters = false) {
$fs = new Filesystem();
$sourcesRealPath = realpath($sources);
if ($sourcesRealPath === false) {
throw new \RuntimeException('Could not realpath() the source directory "' . $sources . '"');
}
$sources = $fs->normalizePath($sourcesRealPath);
if ($ignoreFilters) {
$filters = [];
}
else {
$filters = [
new GitExcludeFilter($sources),
new ComposerExcludeFilter($sources, $excludes),
];
}
$this->finder = new Finder();
$filter = static function (\SplFileInfo $file) use ($sources, $filters, $fs) : bool {
$realpath = $file->getRealPath();
if ($realpath === false) {
return false;
}
if ($file->isLink() && strpos($realpath, $sources) !== 0) {
return false;
}
$relativePath = Preg::replace('#^' . preg_quote($sources, '#') . '#', '', $fs->normalizePath($realpath));
$exclude = false;
foreach ($filters as $filter) {
$exclude = $filter->filter($relativePath, $exclude);
}
return !$exclude;
};
$this->finder
->in($sources)
->filter($filter)
->ignoreVCS(true)
->ignoreDotFiles(false)
->sortByName();
parent::__construct($this->finder
->getIterator());
}