[travis] fix composer.lock invalidation for deps=low

This commit is contained in:
Nicolas Grekas 2018-08-19 11:09:49 +02:00
parent e61cb8e14a
commit caf69aa3c4
3 changed files with 66 additions and 2 deletions

View File

@ -1,5 +1,11 @@
<?php
error_reporting(-1);
set_error_handler(function ($type, $message, $file, $line) {
if (error_reporting()) {
throw new \ErrorException($message, 0, $type, $file, $line);
}
});
array_shift($_SERVER['argv']);
$dirs = $_SERVER['argv'];
@ -59,6 +65,8 @@ foreach ($dirs as $dir) {
$composerJsons[$composerJson['name']] = array($dir, $composerLock['packages'], getRelevantContent($composerJson));
}
$referencedCommits = array();
foreach ($composerJsons as list($dir, $lockedPackages)) {
foreach ($lockedPackages as $lockedJson) {
if (0 !== strpos($version = $lockedJson['version'], 'dev-') && '-dev' !== substr($version, -4)) {
@ -83,5 +91,61 @@ foreach ($composerJsons as list($dir, $lockedPackages)) {
@unlink($dir.'/composer.lock');
continue 2;
}
$referencedCommits[$name][$lockedJson['source']['reference']][] = $dir;
}
}
if (!$referencedCommits || (isset($_SERVER['TRAVIS_PULL_REQUEST']) && 'false' !== $_SERVER['TRAVIS_PULL_REQUEST'])) {
// cached commits cannot be stale for PRs
return;
}
@mkdir($_SERVER['HOME'].'/.cache/composer/repo/https---repo.packagist.org', 0777, true);
$ch = null;
$mh = curl_multi_init();
$sh = curl_share_init();
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_SSL_SESSION);
$chs = array();
foreach ($referencedCommits as $name => $dirsByCommit) {
$chs[] = $ch = array(curl_init(), fopen($_SERVER['HOME'].'/.cache/composer/repo/https---repo.packagist.org/provider-'.strtr($name, '/', '$').'.json', 'wb'));
curl_setopt($ch[0], CURLOPT_URL, 'https://repo.packagist.org/p/'.$name.'.json');
curl_setopt($ch[0], CURLOPT_FILE, $ch[1]);
curl_setopt($ch[0], CURLOPT_SHARE, $sh);
curl_multi_add_handle($mh, $ch[0]);
}
do {
curl_multi_exec($mh, $active);
curl_multi_select($mh);
} while ($active);
foreach ($chs as list($ch, $fd)) {
curl_multi_remove_handle($mh, $ch);
curl_close($ch);
fclose($fd);
}
foreach ($referencedCommits as $name => $dirsByCommit) {
$repo = file_get_contents($_SERVER['HOME'].'/.cache/composer/repo/https---repo.packagist.org/provider-'.strtr($name, '/', '$').'.json');
$repo = json_decode($repo, true);
foreach ($repo['packages'][$name] as $version) {
unset($referencedCommits[$name][$version['source']['reference']]);
}
}
foreach ($referencedCommits as $name => $dirsByCommit) {
foreach ($dirsByCommit as $dirs) {
foreach ($dirs as $dir) {
if (file_exists($dir.'/composer.lock')) {
echo "$dir/composer.lock references old commit for $name.\n";
@unlink($dir.'/composer.lock');
}
}
}
}

View File

@ -195,7 +195,7 @@ install:
else
export SYMFONY_REQUIRE=">=$SYMFONY_VERSION"
fi
composer global require symfony/flex dev-master
composer global require --no-progress --no-scripts --no-plugins symfony/flex dev-master
- |
# Legacy tests are skipped when deps=high and when the current branch version has not the same major version number than the next one

View File

@ -54,7 +54,7 @@ install:
- IF NOT EXIST composer.phar (appveyor DownloadFile https://github.com/composer/composer/releases/download/1.7.1/composer.phar)
- php composer.phar self-update
- copy /Y .composer\* %APPDATA%\Composer\
- php composer.phar global require --no-progress symfony/flex dev-master
- php composer.phar global require --no-progress --no-scripts --no-plugins symfony/flex dev-master
- php .github/build-packages.php "HEAD^" src\Symfony\Bridge\PhpUnit
- IF %APPVEYOR_REPO_BRANCH%==master (SET COMPOSER_ROOT_VERSION=dev-master) ELSE (SET COMPOSER_ROOT_VERSION=%APPVEYOR_REPO_BRANCH%.x-dev)
- php composer.phar config platform.php 5.3.9