From 61ed7a9547e88974830124c06c59bad2a4b229ba Mon Sep 17 00:00:00 2001 From: Jonathan Eskew Date: Sat, 27 Jun 2015 13:54:53 -0700 Subject: [PATCH 1/4] Explicitly check if a file has already been required before requiring it --- src/Composer/Autoload/AutoloadGenerator.php | 9 ++++++++- .../Fixtures/autoload_real_files_by_dependency.php | 9 ++++++++- .../Test/Autoload/Fixtures/autoload_real_functions.php | 9 ++++++++- .../Autoload/Fixtures/autoload_real_include_path.php | 9 ++++++++- .../Test/Autoload/Fixtures/autoload_real_target_dir.php | 9 ++++++++- 5 files changed, 40 insertions(+), 5 deletions(-) diff --git a/src/Composer/Autoload/AutoloadGenerator.php b/src/Composer/Autoload/AutoloadGenerator.php index 284150135..a7dd76706 100644 --- a/src/Composer/Autoload/AutoloadGenerator.php +++ b/src/Composer/Autoload/AutoloadGenerator.php @@ -605,7 +605,14 @@ METHOD_FOOTER; function composerRequire$suffix(\$file) { - require \$file; + static \$requiredFiles = array(); + \$fileSignature = md5_file(\$file); + + if (empty(\$requiredFiles[\$fileSignature])) { + require \$file; + + \$requiredFiles[\$fileSignature] = true; + } } FOOTER; diff --git a/tests/Composer/Test/Autoload/Fixtures/autoload_real_files_by_dependency.php b/tests/Composer/Test/Autoload/Fixtures/autoload_real_files_by_dependency.php index 083070539..43ce6855a 100644 --- a/tests/Composer/Test/Autoload/Fixtures/autoload_real_files_by_dependency.php +++ b/tests/Composer/Test/Autoload/Fixtures/autoload_real_files_by_dependency.php @@ -51,5 +51,12 @@ class ComposerAutoloaderInitFilesAutoloadOrder function composerRequireFilesAutoloadOrder($file) { - require $file; + static $requiredFiles = array(); + $fileSignature = md5_file($file); + + if (empty($requiredFiles[$fileSignature])) { + require $file; + + $requiredFiles[$fileSignature] = true; + } } diff --git a/tests/Composer/Test/Autoload/Fixtures/autoload_real_functions.php b/tests/Composer/Test/Autoload/Fixtures/autoload_real_functions.php index 1c0154964..d13f7e65e 100644 --- a/tests/Composer/Test/Autoload/Fixtures/autoload_real_functions.php +++ b/tests/Composer/Test/Autoload/Fixtures/autoload_real_functions.php @@ -51,5 +51,12 @@ class ComposerAutoloaderInitFilesAutoload function composerRequireFilesAutoload($file) { - require $file; + static $requiredFiles = array(); + $fileSignature = md5_file($file); + + if (empty($requiredFiles[$fileSignature])) { + require $file; + + $requiredFiles[$fileSignature] = true; + } } diff --git a/tests/Composer/Test/Autoload/Fixtures/autoload_real_include_path.php b/tests/Composer/Test/Autoload/Fixtures/autoload_real_include_path.php index 65ba6819e..78e3bc8da 100644 --- a/tests/Composer/Test/Autoload/Fixtures/autoload_real_include_path.php +++ b/tests/Composer/Test/Autoload/Fixtures/autoload_real_include_path.php @@ -67,5 +67,12 @@ class ComposerAutoloaderInitIncludePath function composerRequireIncludePath($file) { - require $file; + static $requiredFiles = array(); + $fileSignature = md5_file($file); + + if (empty($requiredFiles[$fileSignature])) { + require $file; + + $requiredFiles[$fileSignature] = true; + } } diff --git a/tests/Composer/Test/Autoload/Fixtures/autoload_real_target_dir.php b/tests/Composer/Test/Autoload/Fixtures/autoload_real_target_dir.php index dc786f767..eb38a1035 100644 --- a/tests/Composer/Test/Autoload/Fixtures/autoload_real_target_dir.php +++ b/tests/Composer/Test/Autoload/Fixtures/autoload_real_target_dir.php @@ -71,5 +71,12 @@ class ComposerAutoloaderInitTargetDir function composerRequireTargetDir($file) { - require $file; + static $requiredFiles = array(); + $fileSignature = md5_file($file); + + if (empty($requiredFiles[$fileSignature])) { + require $file; + + $requiredFiles[$fileSignature] = true; + } } From 868a872df2cc447bc04209fcfbd466ae533da24d Mon Sep 17 00:00:00 2001 From: Jonathan Eskew Date: Sun, 28 Jun 2015 13:44:43 -0700 Subject: [PATCH 2/4] Push the hash to $GLOBALS --- src/Composer/Autoload/AutoloadGenerator.php | 8 +++++--- .../Fixtures/autoload_real_files_by_dependency.php | 8 +++++--- .../Test/Autoload/Fixtures/autoload_real_functions.php | 8 +++++--- .../Test/Autoload/Fixtures/autoload_real_include_path.php | 8 +++++--- .../Test/Autoload/Fixtures/autoload_real_target_dir.php | 8 +++++--- 5 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/Composer/Autoload/AutoloadGenerator.php b/src/Composer/Autoload/AutoloadGenerator.php index a7dd76706..1f19dbc2d 100644 --- a/src/Composer/Autoload/AutoloadGenerator.php +++ b/src/Composer/Autoload/AutoloadGenerator.php @@ -605,13 +605,15 @@ METHOD_FOOTER; function composerRequire$suffix(\$file) { - static \$requiredFiles = array(); + if (empty(\$GLOBALS['composerRequiredFiles'])) { + \$GLOBALS['composerRequiredFiles'] = []; + } \$fileSignature = md5_file(\$file); - if (empty(\$requiredFiles[\$fileSignature])) { + if (empty(\$GLOBALS['composerRequiredFiles'][\$fileSignature])) { require \$file; - \$requiredFiles[\$fileSignature] = true; + \$GLOBALS['composerRequiredFiles'][\$fileSignature] = true; } } diff --git a/tests/Composer/Test/Autoload/Fixtures/autoload_real_files_by_dependency.php b/tests/Composer/Test/Autoload/Fixtures/autoload_real_files_by_dependency.php index 43ce6855a..47a73b42c 100644 --- a/tests/Composer/Test/Autoload/Fixtures/autoload_real_files_by_dependency.php +++ b/tests/Composer/Test/Autoload/Fixtures/autoload_real_files_by_dependency.php @@ -51,12 +51,14 @@ class ComposerAutoloaderInitFilesAutoloadOrder function composerRequireFilesAutoloadOrder($file) { - static $requiredFiles = array(); + if (empty($GLOBALS['composerRequiredFiles'])) { + $GLOBALS['composerRequiredFiles'] = []; + } $fileSignature = md5_file($file); - if (empty($requiredFiles[$fileSignature])) { + if (empty($GLOBALS['composerRequiredFiles'][$fileSignature])) { require $file; - $requiredFiles[$fileSignature] = true; + $GLOBALS['composerRequiredFiles'][$fileSignature] = true; } } diff --git a/tests/Composer/Test/Autoload/Fixtures/autoload_real_functions.php b/tests/Composer/Test/Autoload/Fixtures/autoload_real_functions.php index d13f7e65e..71ff7b433 100644 --- a/tests/Composer/Test/Autoload/Fixtures/autoload_real_functions.php +++ b/tests/Composer/Test/Autoload/Fixtures/autoload_real_functions.php @@ -51,12 +51,14 @@ class ComposerAutoloaderInitFilesAutoload function composerRequireFilesAutoload($file) { - static $requiredFiles = array(); + if (empty($GLOBALS['composerRequiredFiles'])) { + $GLOBALS['composerRequiredFiles'] = []; + } $fileSignature = md5_file($file); - if (empty($requiredFiles[$fileSignature])) { + if (empty($GLOBALS['composerRequiredFiles'][$fileSignature])) { require $file; - $requiredFiles[$fileSignature] = true; + $GLOBALS['composerRequiredFiles'][$fileSignature] = true; } } diff --git a/tests/Composer/Test/Autoload/Fixtures/autoload_real_include_path.php b/tests/Composer/Test/Autoload/Fixtures/autoload_real_include_path.php index 78e3bc8da..c9876f150 100644 --- a/tests/Composer/Test/Autoload/Fixtures/autoload_real_include_path.php +++ b/tests/Composer/Test/Autoload/Fixtures/autoload_real_include_path.php @@ -67,12 +67,14 @@ class ComposerAutoloaderInitIncludePath function composerRequireIncludePath($file) { - static $requiredFiles = array(); + if (empty($GLOBALS['composerRequiredFiles'])) { + $GLOBALS['composerRequiredFiles'] = []; + } $fileSignature = md5_file($file); - if (empty($requiredFiles[$fileSignature])) { + if (empty($GLOBALS['composerRequiredFiles'][$fileSignature])) { require $file; - $requiredFiles[$fileSignature] = true; + $GLOBALS['composerRequiredFiles'][$fileSignature] = true; } } diff --git a/tests/Composer/Test/Autoload/Fixtures/autoload_real_target_dir.php b/tests/Composer/Test/Autoload/Fixtures/autoload_real_target_dir.php index eb38a1035..1e2ca1384 100644 --- a/tests/Composer/Test/Autoload/Fixtures/autoload_real_target_dir.php +++ b/tests/Composer/Test/Autoload/Fixtures/autoload_real_target_dir.php @@ -71,12 +71,14 @@ class ComposerAutoloaderInitTargetDir function composerRequireTargetDir($file) { - static $requiredFiles = array(); + if (empty($GLOBALS['composerRequiredFiles'])) { + $GLOBALS['composerRequiredFiles'] = []; + } $fileSignature = md5_file($file); - if (empty($requiredFiles[$fileSignature])) { + if (empty($GLOBALS['composerRequiredFiles'][$fileSignature])) { require $file; - $requiredFiles[$fileSignature] = true; + $GLOBALS['composerRequiredFiles'][$fileSignature] = true; } } From 24c4322672a7c2e659dcf5ac81d93347786cb9d3 Mon Sep 17 00:00:00 2001 From: Jonathan Eskew Date: Sun, 28 Jun 2015 13:47:00 -0700 Subject: [PATCH 3/4] Use 5.3 compatible array syntax --- src/Composer/Autoload/AutoloadGenerator.php | 2 +- .../Autoload/Fixtures/autoload_real_files_by_dependency.php | 2 +- .../Composer/Test/Autoload/Fixtures/autoload_real_functions.php | 2 +- .../Test/Autoload/Fixtures/autoload_real_include_path.php | 2 +- .../Test/Autoload/Fixtures/autoload_real_target_dir.php | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Composer/Autoload/AutoloadGenerator.php b/src/Composer/Autoload/AutoloadGenerator.php index 1f19dbc2d..eb176bc5c 100644 --- a/src/Composer/Autoload/AutoloadGenerator.php +++ b/src/Composer/Autoload/AutoloadGenerator.php @@ -606,7 +606,7 @@ METHOD_FOOTER; function composerRequire$suffix(\$file) { if (empty(\$GLOBALS['composerRequiredFiles'])) { - \$GLOBALS['composerRequiredFiles'] = []; + \$GLOBALS['composerRequiredFiles'] = array(); } \$fileSignature = md5_file(\$file); diff --git a/tests/Composer/Test/Autoload/Fixtures/autoload_real_files_by_dependency.php b/tests/Composer/Test/Autoload/Fixtures/autoload_real_files_by_dependency.php index 47a73b42c..682651f38 100644 --- a/tests/Composer/Test/Autoload/Fixtures/autoload_real_files_by_dependency.php +++ b/tests/Composer/Test/Autoload/Fixtures/autoload_real_files_by_dependency.php @@ -52,7 +52,7 @@ class ComposerAutoloaderInitFilesAutoloadOrder function composerRequireFilesAutoloadOrder($file) { if (empty($GLOBALS['composerRequiredFiles'])) { - $GLOBALS['composerRequiredFiles'] = []; + $GLOBALS['composerRequiredFiles'] = array(); } $fileSignature = md5_file($file); diff --git a/tests/Composer/Test/Autoload/Fixtures/autoload_real_functions.php b/tests/Composer/Test/Autoload/Fixtures/autoload_real_functions.php index 71ff7b433..71dbeeb62 100644 --- a/tests/Composer/Test/Autoload/Fixtures/autoload_real_functions.php +++ b/tests/Composer/Test/Autoload/Fixtures/autoload_real_functions.php @@ -52,7 +52,7 @@ class ComposerAutoloaderInitFilesAutoload function composerRequireFilesAutoload($file) { if (empty($GLOBALS['composerRequiredFiles'])) { - $GLOBALS['composerRequiredFiles'] = []; + $GLOBALS['composerRequiredFiles'] = array(); } $fileSignature = md5_file($file); diff --git a/tests/Composer/Test/Autoload/Fixtures/autoload_real_include_path.php b/tests/Composer/Test/Autoload/Fixtures/autoload_real_include_path.php index c9876f150..ec169d591 100644 --- a/tests/Composer/Test/Autoload/Fixtures/autoload_real_include_path.php +++ b/tests/Composer/Test/Autoload/Fixtures/autoload_real_include_path.php @@ -68,7 +68,7 @@ class ComposerAutoloaderInitIncludePath function composerRequireIncludePath($file) { if (empty($GLOBALS['composerRequiredFiles'])) { - $GLOBALS['composerRequiredFiles'] = []; + $GLOBALS['composerRequiredFiles'] = array(); } $fileSignature = md5_file($file); diff --git a/tests/Composer/Test/Autoload/Fixtures/autoload_real_target_dir.php b/tests/Composer/Test/Autoload/Fixtures/autoload_real_target_dir.php index 1e2ca1384..265242c6e 100644 --- a/tests/Composer/Test/Autoload/Fixtures/autoload_real_target_dir.php +++ b/tests/Composer/Test/Autoload/Fixtures/autoload_real_target_dir.php @@ -72,7 +72,7 @@ class ComposerAutoloaderInitTargetDir function composerRequireTargetDir($file) { if (empty($GLOBALS['composerRequiredFiles'])) { - $GLOBALS['composerRequiredFiles'] = []; + $GLOBALS['composerRequiredFiles'] = array(); } $fileSignature = md5_file($file); From 42b025776a5869d7f98603ecc1057c312d766f4a Mon Sep 17 00:00:00 2001 From: Jonathan Eskew Date: Tue, 30 Jun 2015 09:22:51 -0700 Subject: [PATCH 4/4] Move file identifier calculation to compile time --- src/Composer/Autoload/AutoloadGenerator.php | 27 ++++++++++++------- .../Test/Autoload/AutoloadGeneratorTest.php | 6 ++--- .../Test/Autoload/Fixtures/autoload_files.php | 4 +-- .../Autoload/Fixtures/autoload_files2.php | 2 +- .../Fixtures/autoload_files_functions.php | 10 +++---- .../Fixtures/autoload_files_target_dir.php | 4 +-- .../autoload_real_files_by_dependency.php | 11 ++++---- .../Fixtures/autoload_real_functions.php | 11 ++++---- .../Fixtures/autoload_real_include_path.php | 7 +++-- .../Fixtures/autoload_real_target_dir.php | 11 ++++---- 10 files changed, 49 insertions(+), 44 deletions(-) diff --git a/src/Composer/Autoload/AutoloadGenerator.php b/src/Composer/Autoload/AutoloadGenerator.php index eb176bc5c..1a4fd267f 100644 --- a/src/Composer/Autoload/AutoloadGenerator.php +++ b/src/Composer/Autoload/AutoloadGenerator.php @@ -410,8 +410,9 @@ EOF; protected function getIncludeFilesFile(array $files, Filesystem $filesystem, $basePath, $vendorPath, $vendorPathCode, $appBaseDirCode) { $filesCode = ''; - foreach ($files as $functionFile) { - $filesCode .= ' '.$this->getPathCode($filesystem, $basePath, $vendorPath, $functionFile).",\n"; + foreach ($files as $fileIdentifier => $functionFile) { + $filesCode .= ' ' . $fileIdentifier . ' => ' + . $this->getPathCode($filesystem, $basePath, $vendorPath, $functionFile) . ",\n"; } if (!$filesCode) { @@ -584,8 +585,8 @@ REGISTER_LOADER; if ($useIncludeFiles) { $file .= << \$file) { + composerRequire$suffix(\$fileIdentifier, \$file); } @@ -603,17 +604,16 @@ METHOD_FOOTER; return $file . <<