Skip to content

Commit c0ba60d

Browse files
committed
Clean up sort packages logic
1 parent 6fe908b commit c0ba60d

File tree

1 file changed

+42
-43
lines changed

1 file changed

+42
-43
lines changed

bin/composer-git-merge-driver

Lines changed: 42 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -106,38 +106,37 @@ function merge($ancestor, $ours, $theirs) {
106106
}
107107

108108
// Sort composer packages
109-
// Method was taken from https://github.com/composer/composer/blob/master/src/Composer/Json/JsonManipulator.php#L117-L146
110-
function sortPackages(&$packages)
111-
{
112-
$prefix = function ($requirement) {
113-
// value was taken from https://github.com/composer/composer/blob/master/src/Composer/Repository/PlatformRepository.php#L27
114-
$platformPackageRegexp = '{^(?:php(?:-64bit|-ipv6|-zts|-debug)?|hhvm|(?:ext|lib)-[^/ ]+)$}i';
115-
116-
if (preg_match($platformPackageRegexp, $requirement)) {
117-
return preg_replace(
118-
array(
119-
'/^php/',
120-
'/^hhvm/',
121-
'/^ext/',
122-
'/^lib/',
123-
'/^\D/',
124-
),
125-
array(
126-
'0-$0',
127-
'1-$0',
128-
'2-$0',
129-
'3-$0',
130-
'4-$0',
131-
),
132-
$requirement
133-
);
134-
}
135-
return '5-'.$requirement;
136-
};
137-
138-
uksort($packages, function ($a, $b) use ($prefix) {
139-
return strnatcmp($prefix($a), $prefix($b));
140-
});
109+
// adapted from https://github.com/composer/composer/blob/master/src/Composer/Json/JsonManipulator.php#L117-L146
110+
function sortPackages(&$packages) {
111+
$prefix = function ($requirement) {
112+
// value from https://github.com/composer/composer/blob/master/src/Composer/Repository/PlatformRepository.php#L27
113+
$platformPackageRegexp = '{^(?:php(?:-64bit|-ipv6|-zts|-debug)?|hhvm|(?:ext|lib)-[^/ ]+)$}i';
114+
115+
if (preg_match($platformPackageRegexp, $requirement)) {
116+
return preg_replace(
117+
[
118+
'/^php/',
119+
'/^hhvm/',
120+
'/^ext/',
121+
'/^lib/',
122+
'/^\D/',
123+
],
124+
[
125+
'0-$0',
126+
'1-$0',
127+
'2-$0',
128+
'3-$0',
129+
'4-$0',
130+
],
131+
$requirement
132+
);
133+
}
134+
return '5-' . $requirement;
135+
};
136+
137+
uksort($packages, function ($a, $b) use ($prefix) {
138+
return strnatcmp($prefix($a), $prefix($b));
139+
});
141140
}
142141

143142
// special handling for lock files
@@ -190,19 +189,19 @@ if ($isLock) {
190189

191190
$merged = json_encode($merged, JSON_ENCODE_OPTIONS);
192191
} else {
193-
$merged = merge($ancestor, $ours, $theirs);
194-
195-
if (isset($merged['config']['sort-packages']) && $merged['config']['sort-packages'] === true) {
196-
foreach (['require', 'require-dev'] as $section) {
197-
$packageArray = $merged[$section];
198-
199-
sortPackages($packageArray);
192+
$merged = merge($ancestor, $ours, $theirs);
200193

201-
$merged[$section] = $packageArray;
202-
}
203-
}
194+
if (isset($merged['config']['sort-packages']) && $merged['config']['sort-packages'] === true) {
195+
foreach (['require', 'require-dev'] as $section) {
196+
// skip if the section type doesn't exist
197+
if (!isset($merged[$section])) {
198+
continue;
199+
}
200+
sortPackages($merged[$section]);
201+
}
202+
}
204203

205-
$merged = json_encode($merged, JSON_ENCODE_OPTIONS);
204+
$merged = json_encode($merged, JSON_ENCODE_OPTIONS);
206205
}
207206

208207
// if we have conflicts, replace the conflict markers with the actual conflicting values

0 commit comments

Comments
 (0)