File: 0015-Revert-Fix-regression-from-12233-in-InstalledVersion.patch

package info (click to toggle)
composer 2.8.11-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 10,752 kB
  • sloc: php: 77,487; makefile: 59; xml: 39
file content (130 lines) | stat: -rw-r--r-- 5,282 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
From: =?utf-8?q?David_Pr=C3=A9vot?= <taffit@debian.org>
Date: Wed, 22 Jan 2025 13:57:16 +0100
Subject: Revert "Fix regression from #12233 in InstalledVersions when reload
 is used, fixes #12235"

This reverts commit ee6dc33fd10f550237da9fa2518f0741ca2c7698.

Origin: vendor, https://github.com/composer/composer/commit/ee6dc33fd10f550237da9fa2518f0741ca2c7698
---
 src/Composer/InstalledVersions.php            | 20 ++------------------
 tests/Composer/Test/InstalledVersionsTest.php | 27 ---------------------------
 tests/bootstrap.php                           |  6 +++++-
 3 files changed, 7 insertions(+), 46 deletions(-)

diff --git a/src/Composer/InstalledVersions.php b/src/Composer/InstalledVersions.php
index 2052022..87766a2 100644
--- a/src/Composer/InstalledVersions.php
+++ b/src/Composer/InstalledVersions.php
@@ -38,11 +38,6 @@ class InstalledVersions
      */
     private static $installed;
 
-    /**
-     * @var bool
-     */
-    private static $installedIsLocalDir;
-
     /**
      * @var bool|null
      */
@@ -320,12 +315,6 @@ class InstalledVersions
     {
         self::$installed = $data;
         self::$installedByVendor = array();
-
-        // when using reload, we disable the duplicate protection to ensure that self::$installed data is
-        // always returned, but we cannot know whether it comes from the installed.php in __DIR__ or not,
-        // so we have to assume it does not, and that may result in duplicate data being returned when listing
-        // all installed packages for example
-        self::$installedIsLocalDir = false;
     }
 
     /**
@@ -354,9 +343,7 @@ class InstalledVersions
         $copiedLocalDir = false;
 
         if (self::$canGetVendors) {
-            $selfDir = self::getSelfDir();
             foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
-                $vendorDir = strtr($vendorDir, '\\', '/');
                 if (isset(self::$installedByVendor[$vendorDir])) {
                     $installed[] = self::$installedByVendor[$vendorDir];
                 } elseif (is_file($vendorDir.'/composer/installed.php')) {
@@ -364,14 +351,11 @@ class InstalledVersions
                     $required = require $vendorDir.'/composer/installed.php';
                     self::$installedByVendor[$vendorDir] = $required;
                     $installed[] = $required;
-                    if (self::$installed === null && $vendorDir.'/composer' === $selfDir) {
+                    if (strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
                         self::$installed = $required;
-                        self::$installedIsLocalDir = true;
+                        $copiedLocalDir = true;
                     }
                 }
-                if (self::$installedIsLocalDir && $vendorDir.'/composer' === $selfDir) {
-                    $copiedLocalDir = true;
-                }
             }
         }
 
diff --git a/tests/Composer/Test/InstalledVersionsTest.php b/tests/Composer/Test/InstalledVersionsTest.php
index 8f97601..f5e9c5b 100644
--- a/tests/Composer/Test/InstalledVersionsTest.php
+++ b/tests/Composer/Test/InstalledVersionsTest.php
@@ -266,31 +266,4 @@ class InstalledVersionsTest extends TestCase
         self::assertSame('/foo/bar/vendor/c/c', \Composer\InstalledVersions::getInstallPath('c/c'));
         self::assertNull(\Composer\InstalledVersions::getInstallPath('foo/impl'));
     }
-
-    public function testWithClassLoaderLoaded(): void
-    {
-        // disable multiple-ClassLoader-based checks of InstalledVersions by making it seem like no
-        // class loaders are registered
-        $prop = new \ReflectionProperty(ClassLoader::class, 'registeredLoaders');
-        (\PHP_VERSION_ID < 80100) and $prop->setAccessible(true);
-        $prop->setValue(null, array_slice(self::$previousRegisteredLoaders, 0, 1, true));
-
-        $prop2 = new \ReflectionProperty(InstalledVersions::class, 'installedIsLocalDir');
-        (\PHP_VERSION_ID < 80100) and $prop2->setAccessible(true);
-        $prop2->setValue(null, true);
-
-        self::assertFalse(InstalledVersions::isInstalled('foo/bar'));
-        InstalledVersions::reload([
-            'root' => InstalledVersions::getRootPackage(),
-            'versions' => [
-                'foo/bar' => [
-                    'version' => '1.0.0',
-                    'dev_requirement' => false,
-                ],
-            ],
-        ]);
-        self::assertTrue(InstalledVersions::isInstalled('foo/bar'));
-
-        $prop->setValue(null, []);
-    }
 }
diff --git a/tests/bootstrap.php b/tests/bootstrap.php
index fe1d3b0..05b88f2 100644
--- a/tests/bootstrap.php
+++ b/tests/bootstrap.php
@@ -10,6 +10,7 @@
  * file that was distributed with this source code.
  */
 
+use Composer\InstalledVersions;
 use Composer\Util\Platform;
 
 error_reporting(E_ALL);
@@ -19,7 +20,10 @@ if (function_exists('date_default_timezone_set') && function_exists('date_defaul
 }
 
 require __DIR__.'/../src/bootstrap.php';
-require __DIR__.'/../vendor/composer/InstalledVersions.php';
+
+if (!class_exists(InstalledVersions::class, false)) {
+    require __DIR__.'/../src/Composer/InstalledVersions.php';
+}
 
 Platform::putEnv('COMPOSER_TESTS_ARE_RUNNING', '1');