Fix abort of downloads and zip extraction to happen immediately, fixes #9390
parent
b724adde10
commit
f37f3dab04
|
@ -16,6 +16,7 @@ use Composer\Config;
|
||||||
use Composer\Cache;
|
use Composer\Cache;
|
||||||
use Composer\IO\IOInterface;
|
use Composer\IO\IOInterface;
|
||||||
use Composer\IO\NullIO;
|
use Composer\IO\NullIO;
|
||||||
|
use Composer\Exception\IrrecoverableDownloadException;
|
||||||
use Composer\Package\Comparer\Comparer;
|
use Composer\Package\Comparer\Comparer;
|
||||||
use Composer\DependencyResolver\Operation\UpdateOperation;
|
use Composer\DependencyResolver\Operation\UpdateOperation;
|
||||||
use Composer\DependencyResolver\Operation\InstallOperation;
|
use Composer\DependencyResolver\Operation\InstallOperation;
|
||||||
|
@ -219,6 +220,10 @@ class FileDownloader implements DownloaderInterface, ChangeReportInterface
|
||||||
}
|
}
|
||||||
$self->clearLastCacheWrite($package);
|
$self->clearLastCacheWrite($package);
|
||||||
|
|
||||||
|
if ($e instanceof IrrecoverableDownloadException) {
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
|
||||||
if ($e instanceof TransportException) {
|
if ($e instanceof TransportException) {
|
||||||
// if we got an http response with a proper code, then requesting again will probably not help, abort
|
// if we got an http response with a proper code, then requesting again will probably not help, abort
|
||||||
if ((0 !== $e->getCode() && !in_array($e->getCode(), array(500, 502, 503, 504))) || !$retries) {
|
if ((0 !== $e->getCode() && !in_array($e->getCode(), array(500, 502, 503, 504))) || !$retries) {
|
||||||
|
|
|
@ -19,6 +19,7 @@ use Composer\Util\Http\Response;
|
||||||
use Composer\Composer;
|
use Composer\Composer;
|
||||||
use Composer\Package\Version\VersionParser;
|
use Composer\Package\Version\VersionParser;
|
||||||
use Composer\Semver\Constraint\Constraint;
|
use Composer\Semver\Constraint\Constraint;
|
||||||
|
use Composer\Exception\IrrecoverableDownloadException;
|
||||||
use React\Promise\Promise;
|
use React\Promise\Promise;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -257,10 +258,11 @@ class HttpDownloader
|
||||||
if (isset($job['curl_id'])) {
|
if (isset($job['curl_id'])) {
|
||||||
$curl->abortRequest($job['curl_id']);
|
$curl->abortRequest($job['curl_id']);
|
||||||
}
|
}
|
||||||
|
throw new IrrecoverableDownloadException('Download of ' . Url::sanitize($job['request']['url']) . ' canceled');
|
||||||
};
|
};
|
||||||
|
|
||||||
$promise = new Promise($resolver, $canceler);
|
$promise = new Promise($resolver, $canceler);
|
||||||
$promise->then(function ($response) use (&$job, $downloader) {
|
$promise = $promise->then(function ($response) use (&$job, $downloader) {
|
||||||
$job['status'] = HttpDownloader::STATUS_COMPLETED;
|
$job['status'] = HttpDownloader::STATUS_COMPLETED;
|
||||||
$job['response'] = $response;
|
$job['response'] = $response;
|
||||||
|
|
||||||
|
@ -306,7 +308,7 @@ class HttpDownloader
|
||||||
if (isset($job['request']['options']['http']['header']) && false !== stripos(implode('', $job['request']['options']['http']['header']), 'if-modified-since')) {
|
if (isset($job['request']['options']['http']['header']) && false !== stripos(implode('', $job['request']['options']['http']['header']), 'if-modified-since')) {
|
||||||
$resolve(new Response(array('url' => $url), 304, array(), ''));
|
$resolve(new Response(array('url' => $url), 304, array(), ''));
|
||||||
} else {
|
} else {
|
||||||
$e = new TransportException('Network disabled, request canceled: '.$url, 499);
|
$e = new TransportException('Network disabled, request canceled: '.Url::sanitize($url), 499);
|
||||||
$e->setStatusCode(499);
|
$e->setStatusCode(499);
|
||||||
$reject($e);
|
$reject($e);
|
||||||
}
|
}
|
||||||
|
@ -429,7 +431,7 @@ class HttpDownloader
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$io->writeError('<'.$type.'>'.ucfirst($type).' from '.$url.': '.$data[$type].'</'.$type.'>');
|
$io->writeError('<'.$type.'>'.ucfirst($type).' from '.Url::sanitize($url).': '.$data[$type].'</'.$type.'>');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -177,6 +177,8 @@ class ProcessExecutor
|
||||||
// signal can throw in various conditions, but we don't care if it fails
|
// signal can throw in various conditions, but we don't care if it fails
|
||||||
}
|
}
|
||||||
$job['process']->stop(1);
|
$job['process']->stop(1);
|
||||||
|
|
||||||
|
throw new \RuntimeException('Aborted process');
|
||||||
};
|
};
|
||||||
|
|
||||||
$promise = new Promise($resolver, $canceler);
|
$promise = new Promise($resolver, $canceler);
|
||||||
|
|
Loading…
Reference in New Issue