Loading composer/Plugin/Scaffold/GenerateAutoloadReferenceFile.php +7 −8 Original line number Diff line number Diff line Loading @@ -38,12 +38,11 @@ private function __construct() { */ public static function generateAutoload(IOInterface $io, $package_name, $web_root, $vendor) { $autoload_path = static::autoloadPath($package_name, $web_root); $location = dirname($autoload_path->fullPath()); // Calculate the relative path from the webroot (location of the project // autoload.php) to the vendor directory. $fs = new Filesystem(); $relative_vendor_path = $fs->findShortestPath(realpath($location), $vendor); file_put_contents($autoload_path->fullPath(), static::autoLoadContents($relative_vendor_path)); $relative_autoload_path = $fs->findShortestPath($autoload_path->fullPath(), "$vendor/autoload.php"); file_put_contents($autoload_path->fullPath(), static::autoLoadContents($relative_autoload_path)); return new ScaffoldResult($autoload_path, TRUE); } Loading Loading @@ -91,14 +90,14 @@ protected static function autoloadPath($package_name, $web_root) { /** * Builds the contents of the autoload file. * * @param string $vendor_path * The relative path to vendor. * @param string $relative_autoload_path * The relative path to the autoloader in vendor. * * @return string * Return the contents for the autoload.php. */ protected static function autoLoadContents($vendor_path) { $vendor_path = rtrim($vendor_path, '/'); protected static function autoLoadContents($relative_autoload_path) { $relative_autoload_path = preg_replace('#^\./#', '', $relative_autoload_path); return <<<EOF <?php Loading @@ -115,7 +114,7 @@ protected static function autoLoadContents($vendor_path) { * @see core/modules/statistics/statistics.php */ return require __DIR__ . '/{$vendor_path}/autoload.php'; return require __DIR__ . '/{$relative_autoload_path}'; EOF; } Loading composer/Plugin/Scaffold/ScaffoldFilePath.php +10 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,8 @@ namespace Drupal\Composer\Plugin\Scaffold; use Composer\Util\Filesystem; /** * Manage the path to a file to scaffold. * Loading Loading @@ -61,6 +63,14 @@ public function __construct($path_type, $package_name, $rel_path, $full_path) { $this->packageName = $package_name; $this->relativePath = $rel_path; $this->fullPath = $full_path; // Ensure that the full path really is a full path. We do not use // 'realpath' here because the file specified by the full path might // not exist yet. $fs = new Filesystem(); if (!$fs->isAbsolutePath($this->fullPath)) { $this->fullPath = getcwd() . '/' . $this->fullPath; } } /** Loading core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Functional/ScaffoldTest.php +28 −3 Original line number Diff line number Diff line Loading @@ -194,6 +194,7 @@ public function testProjectThatScaffoldsEmptyProject() { $result = $this->scaffoldSut($fixture_name, FALSE, FALSE); $this->assertContains('The allowed package fixtures/empty-fixture does not provide a file mapping for Composer Scaffold', $result->scaffoldOutput()); $this->assertCommonDrupalAssetsWereScaffolded($result->docroot(), FALSE); $this->assertAutoloadFileCorrect($result->docroot()); } public function scaffoldOverridingSettingsExcludingHtaccessValues() { Loading Loading @@ -229,6 +230,7 @@ public function testScaffoldOverridingSettingsExcludingHtaccess($fixture_name, $ $result = $this->scaffoldSut($fixture_name, $is_link, $relocated_docroot); $this->assertCommonDrupalAssetsWereScaffolded($result->docroot(), $is_link); $this->assertAutoloadFileCorrect($result->docroot(), $relocated_docroot); $this->assertDefaultSettingsFromScaffoldOverride($result->docroot(), $is_link); $this->assertHtaccessExcluded($result->docroot()); } Loading @@ -248,6 +250,7 @@ public function testDrupalDrupalFileWasReplaced() { $this->assertScaffoldedFile($result->docroot() . '/keep-me.txt', FALSE, 'File in drupal-drupal-test-overwrite that is not replaced'); $this->assertScaffoldedFile($result->docroot() . '/make-me.txt', FALSE, 'from assets that replaces file'); $this->assertCommonDrupalAssetsWereScaffolded($result->docroot(), FALSE); $this->assertAutoloadFileCorrect($result->docroot()); $this->assertScaffoldedFile($result->docroot() . '/robots.txt', FALSE, $fixture_name); } Loading Loading @@ -322,6 +325,7 @@ public function testDrupalDrupalFileWasAppended($fixture_name, $is_link, $robots $this->assertScaffoldedFile($result->docroot() . '/robots.txt', FALSE, $robots_txt_contents); $this->assertCommonDrupalAssetsWereScaffolded($result->docroot(), $is_link); $this->assertAutoloadFileCorrect($result->docroot()); } /** Loading Loading @@ -361,9 +365,7 @@ protected function assertHtaccessExcluded($docroot) { * Whether or not symlinking is used. */ protected function assertCommonDrupalAssetsWereScaffolded($docroot, $is_link) { // Ensure that the autoload.php file was written. $this->assertFileExists($docroot . '/autoload.php'); // Assert other scaffold files are written in the correct locations. // Assert scaffold files are written in the correct locations. $this->assertScaffoldedFile($docroot . '/.csslintrc', $is_link, 'Test version of .csslintrc from drupal/core.'); $this->assertScaffoldedFile($docroot . '/.editorconfig', $is_link, 'Test version of .editorconfig from drupal/core.'); $this->assertScaffoldedFile($docroot . '/.eslintignore', $is_link, 'Test version of .eslintignore from drupal/core.'); Loading @@ -378,4 +380,27 @@ protected function assertCommonDrupalAssetsWereScaffolded($docroot, $is_link) { $this->assertScaffoldedFile($docroot . '/web.config', $is_link, 'Test version of web.config from drupal/core.'); } /** * Assert that the autoload file was scaffolded and contains correct path. * * @param string $docroot * Location of the doc root, where autoload.php should be written. * @param bool $relocated_docroot * Whether the document root is relocated or now. */ protected function assertAutoloadFileCorrect($docroot, $relocated_docroot = FALSE) { $autoload_path = $docroot . '/autoload.php'; // Ensure that the autoload.php file was written. $this->assertFileExists($autoload_path); $contents = file_get_contents($autoload_path); $expected = "return require __DIR__ . '/vendor/autoload.php';"; if ($relocated_docroot) { $expected = "return require __DIR__ . '/../vendor/autoload.php';"; } $this->assertContains($expected, $contents); } } Loading
composer/Plugin/Scaffold/GenerateAutoloadReferenceFile.php +7 −8 Original line number Diff line number Diff line Loading @@ -38,12 +38,11 @@ private function __construct() { */ public static function generateAutoload(IOInterface $io, $package_name, $web_root, $vendor) { $autoload_path = static::autoloadPath($package_name, $web_root); $location = dirname($autoload_path->fullPath()); // Calculate the relative path from the webroot (location of the project // autoload.php) to the vendor directory. $fs = new Filesystem(); $relative_vendor_path = $fs->findShortestPath(realpath($location), $vendor); file_put_contents($autoload_path->fullPath(), static::autoLoadContents($relative_vendor_path)); $relative_autoload_path = $fs->findShortestPath($autoload_path->fullPath(), "$vendor/autoload.php"); file_put_contents($autoload_path->fullPath(), static::autoLoadContents($relative_autoload_path)); return new ScaffoldResult($autoload_path, TRUE); } Loading Loading @@ -91,14 +90,14 @@ protected static function autoloadPath($package_name, $web_root) { /** * Builds the contents of the autoload file. * * @param string $vendor_path * The relative path to vendor. * @param string $relative_autoload_path * The relative path to the autoloader in vendor. * * @return string * Return the contents for the autoload.php. */ protected static function autoLoadContents($vendor_path) { $vendor_path = rtrim($vendor_path, '/'); protected static function autoLoadContents($relative_autoload_path) { $relative_autoload_path = preg_replace('#^\./#', '', $relative_autoload_path); return <<<EOF <?php Loading @@ -115,7 +114,7 @@ protected static function autoLoadContents($vendor_path) { * @see core/modules/statistics/statistics.php */ return require __DIR__ . '/{$vendor_path}/autoload.php'; return require __DIR__ . '/{$relative_autoload_path}'; EOF; } Loading
composer/Plugin/Scaffold/ScaffoldFilePath.php +10 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,8 @@ namespace Drupal\Composer\Plugin\Scaffold; use Composer\Util\Filesystem; /** * Manage the path to a file to scaffold. * Loading Loading @@ -61,6 +63,14 @@ public function __construct($path_type, $package_name, $rel_path, $full_path) { $this->packageName = $package_name; $this->relativePath = $rel_path; $this->fullPath = $full_path; // Ensure that the full path really is a full path. We do not use // 'realpath' here because the file specified by the full path might // not exist yet. $fs = new Filesystem(); if (!$fs->isAbsolutePath($this->fullPath)) { $this->fullPath = getcwd() . '/' . $this->fullPath; } } /** Loading
core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Functional/ScaffoldTest.php +28 −3 Original line number Diff line number Diff line Loading @@ -194,6 +194,7 @@ public function testProjectThatScaffoldsEmptyProject() { $result = $this->scaffoldSut($fixture_name, FALSE, FALSE); $this->assertContains('The allowed package fixtures/empty-fixture does not provide a file mapping for Composer Scaffold', $result->scaffoldOutput()); $this->assertCommonDrupalAssetsWereScaffolded($result->docroot(), FALSE); $this->assertAutoloadFileCorrect($result->docroot()); } public function scaffoldOverridingSettingsExcludingHtaccessValues() { Loading Loading @@ -229,6 +230,7 @@ public function testScaffoldOverridingSettingsExcludingHtaccess($fixture_name, $ $result = $this->scaffoldSut($fixture_name, $is_link, $relocated_docroot); $this->assertCommonDrupalAssetsWereScaffolded($result->docroot(), $is_link); $this->assertAutoloadFileCorrect($result->docroot(), $relocated_docroot); $this->assertDefaultSettingsFromScaffoldOverride($result->docroot(), $is_link); $this->assertHtaccessExcluded($result->docroot()); } Loading @@ -248,6 +250,7 @@ public function testDrupalDrupalFileWasReplaced() { $this->assertScaffoldedFile($result->docroot() . '/keep-me.txt', FALSE, 'File in drupal-drupal-test-overwrite that is not replaced'); $this->assertScaffoldedFile($result->docroot() . '/make-me.txt', FALSE, 'from assets that replaces file'); $this->assertCommonDrupalAssetsWereScaffolded($result->docroot(), FALSE); $this->assertAutoloadFileCorrect($result->docroot()); $this->assertScaffoldedFile($result->docroot() . '/robots.txt', FALSE, $fixture_name); } Loading Loading @@ -322,6 +325,7 @@ public function testDrupalDrupalFileWasAppended($fixture_name, $is_link, $robots $this->assertScaffoldedFile($result->docroot() . '/robots.txt', FALSE, $robots_txt_contents); $this->assertCommonDrupalAssetsWereScaffolded($result->docroot(), $is_link); $this->assertAutoloadFileCorrect($result->docroot()); } /** Loading Loading @@ -361,9 +365,7 @@ protected function assertHtaccessExcluded($docroot) { * Whether or not symlinking is used. */ protected function assertCommonDrupalAssetsWereScaffolded($docroot, $is_link) { // Ensure that the autoload.php file was written. $this->assertFileExists($docroot . '/autoload.php'); // Assert other scaffold files are written in the correct locations. // Assert scaffold files are written in the correct locations. $this->assertScaffoldedFile($docroot . '/.csslintrc', $is_link, 'Test version of .csslintrc from drupal/core.'); $this->assertScaffoldedFile($docroot . '/.editorconfig', $is_link, 'Test version of .editorconfig from drupal/core.'); $this->assertScaffoldedFile($docroot . '/.eslintignore', $is_link, 'Test version of .eslintignore from drupal/core.'); Loading @@ -378,4 +380,27 @@ protected function assertCommonDrupalAssetsWereScaffolded($docroot, $is_link) { $this->assertScaffoldedFile($docroot . '/web.config', $is_link, 'Test version of web.config from drupal/core.'); } /** * Assert that the autoload file was scaffolded and contains correct path. * * @param string $docroot * Location of the doc root, where autoload.php should be written. * @param bool $relocated_docroot * Whether the document root is relocated or now. */ protected function assertAutoloadFileCorrect($docroot, $relocated_docroot = FALSE) { $autoload_path = $docroot . '/autoload.php'; // Ensure that the autoload.php file was written. $this->assertFileExists($autoload_path); $contents = file_get_contents($autoload_path); $expected = "return require __DIR__ . '/vendor/autoload.php';"; if ($relocated_docroot) { $expected = "return require __DIR__ . '/../vendor/autoload.php';"; } $this->assertContains($expected, $contents); } }