MDL-50611 test: use cURL extension to download Composer
The curl binary is nowhere near as common in Windows environments as it is in Linux and Mac ones. In order to encourage more users to adopt Behat and PHPUnit for their testing, we should avoid introducing unnecessary hurdles.
This commit is contained in:
committed by
Luke Carrier
parent
f4bfbd5aa2
commit
0897e19093
+41
-10
@@ -25,6 +25,13 @@
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
/**
|
||||
* Composer error exit status.
|
||||
*
|
||||
* @var integer
|
||||
*/
|
||||
define('TESTING_EXITCODE_COMPOSER', 255);
|
||||
|
||||
/**
|
||||
* Returns relative path against current working directory,
|
||||
* to be used for shell execution hints.
|
||||
@@ -170,22 +177,45 @@ function testing_error($errorcode, $text = '') {
|
||||
* @return void exit() if something goes wrong
|
||||
*/
|
||||
function testing_update_composer_dependencies() {
|
||||
|
||||
// To restore the value after finishing.
|
||||
$cwd = getcwd();
|
||||
|
||||
// Dirroot.
|
||||
chdir(__DIR__ . '/../..');
|
||||
// Set some paths.
|
||||
$dirroot = dirname(dirname(__DIR__));
|
||||
$composerpath = $dirroot . DIRECTORY_SEPARATOR . 'composer.phar';
|
||||
$composerurl = 'https://getcomposer.org/composer.phar';
|
||||
|
||||
// Download composer.phar if we can.
|
||||
if (!file_exists(__DIR__ . '/../../composer.phar')) {
|
||||
passthru("curl http://getcomposer.org/installer | php", $code);
|
||||
if ($code != 0) {
|
||||
exit($code);
|
||||
// Switch to Moodle's dirroot for easier path handling.
|
||||
chdir($dirroot);
|
||||
|
||||
// Download or update composer.phar. Unfortunately we can't use the curl
|
||||
// class in filelib.php as we're running within one of the test platforms.
|
||||
if (!file_exists($composerpath)) {
|
||||
$file = @fopen($composerpath, 'w+');
|
||||
if ($file === false) {
|
||||
$errordetails = error_get_last();
|
||||
$error = sprintf("Unable to open composer.phar\nPHP error: %s",
|
||||
$errordetails['message']);
|
||||
testing_error(TESTING_EXITCODE_COMPOSER, $error);
|
||||
}
|
||||
$curl = curl_init();
|
||||
|
||||
curl_setopt($curl, CURLOPT_URL, $composerurl);
|
||||
curl_setopt($curl, CURLOPT_FILE, $file);
|
||||
$result = curl_exec($curl);
|
||||
|
||||
$curlerrno = curl_errno($curl);
|
||||
$curlerror = curl_error($curl);
|
||||
|
||||
curl_close($curl);
|
||||
fclose($file);
|
||||
|
||||
if (!$result) {
|
||||
$error = sprintf("Unable to download composer.phar\ncURL error (%d): %s",
|
||||
$curlerrno, $curlerror);
|
||||
testing_error(TESTING_EXITCODE_COMPOSER, $error);
|
||||
}
|
||||
} else {
|
||||
|
||||
// If it is already there update the installer.
|
||||
passthru("php composer.phar self-update", $code);
|
||||
if ($code != 0) {
|
||||
exit($code);
|
||||
@@ -198,5 +228,6 @@ function testing_update_composer_dependencies() {
|
||||
exit($code);
|
||||
}
|
||||
|
||||
// Return to our original location.
|
||||
chdir($cwd);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user