@@ -70,12 +70,18 @@ public function dump(array $packages)
70
70
}
71
71
$ repo ['providers ' ] = [];
72
72
$ i = 1 ;
73
+ // Give each version a unique ID
73
74
foreach ($ packagesByName as $ packageName => $ versionPackages ) {
74
- foreach ($ versionPackages as $ version => & $ versionPackage ) {
75
- $ versionPackage ['uid ' ] = $ i ++;
75
+ foreach ($ versionPackages as $ version => $ versionPackage ) {
76
+ $ packagesByName [ $ packageName ][ $ version ] ['uid ' ] = $ i ++;
76
77
}
78
+ }
79
+ // Dump the packages along with packages they're replaced by
80
+ foreach ($ packagesByName as $ packageName => $ versionPackages ) {
81
+ $ dumpPackages = $ this ->findReplacements ($ packagesByName , $ packageName );
82
+ $ dumpPackages [$ packageName ] = $ versionPackages ;
77
83
$ includes = $ this ->dumpPackageIncludeJson (
78
- [ $ packageName => $ versionPackages ] ,
84
+ $ dumpPackages ,
79
85
str_replace ('%package% ' , $ packageName , $ providersUrl ),
80
86
'sha256 '
81
87
);
@@ -90,6 +96,28 @@ public function dump(array $packages)
90
96
$ this ->pruneIncludeDirectories ();
91
97
}
92
98
99
+ /**
100
+ * Find packages replacing the $replaced packages
101
+ *
102
+ * @param array $packages
103
+ * @param string $replaced
104
+ *
105
+ * @return array
106
+ */
107
+ private function findReplacements ($ packages , $ replaced )
108
+ {
109
+ $ replacements = array ();
110
+ foreach ($ packages as $ packageName => $ packageConfig ) {
111
+ foreach ($ packageConfig as $ versionConfig ) {
112
+ if (!empty ($ versionConfig ['replace ' ]) && array_key_exists ($ replaced , $ versionConfig ['replace ' ])) {
113
+ $ replacements [$ packageName ] = $ packageConfig ;
114
+ break ;
115
+ }
116
+ }
117
+ }
118
+ return $ replacements ;
119
+ }
120
+
93
121
/**
94
122
* Remove all files matching the includeUrl pattern next to just created include jsons
95
123
*/
0 commit comments