function GitExcluder::excludeGitDirectories
Excludes .git directories from stage operations.
Any .git directories that are a part of an installed package -- for example, a module that Composer installed from source -- are included.
Parameters
\Drupal\package_manager\Event\CollectPathsToExcludeEvent $event: The event object.
Throws
\Exception See \Drupal\package_manager\ComposerInspector::validate().
File
-
core/
modules/ package_manager/ src/ PathExcluder/ GitExcluder.php, line 48
Class
- GitExcluder
- Excludes .git directories from stage operations.
Namespace
Drupal\package_manager\PathExcluderCode
public function excludeGitDirectories(CollectPathsToExcludeEvent $event) : void {
$project_root = $this->pathLocator
->getProjectRoot();
// To determine which .git directories to exclude, the installed packages
// must be known, and that requires Composer commands to be able to run.
// This intentionally does not catch exceptions: failed Composer validation
// in the project root implies that this excluder cannot function correctly.
// Note: the call to ComposerInspector::getInstalledPackagesList() would
// also have triggered this, but explicitness is preferred here.
// @see \Drupal\package_manager\StatusCheckTrait::runStatusCheck()
$this->composerInspector
->validate($project_root);
$paths_to_exclude = [];
$installed_paths = [];
// Collect the paths of every installed package.
$installed_packages = $this->composerInspector
->getInstalledPackagesList($project_root);
foreach ($installed_packages as $package) {
if (!empty($package->path)) {
$installed_paths[] = $package->path;
}
}
$paths = $event->scanForDirectoriesByName('.git');
foreach ($paths as $git_directory) {
// Don't exclude any `.git` directory that is directly under an installed
// package's path, since it means Composer probably installed that package
// from source and therefore needs the `.git` directory in order to update
// the package.
if (!in_array(dirname($git_directory), $installed_paths, TRUE)) {
$paths_to_exclude[] = $git_directory;
}
}
$event->addPathsRelativeToProjectRoot($paths_to_exclude);
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.