From e0a4efe18197e952d15636ada2b1ca01fcd3d259 Mon Sep 17 00:00:00 2001 From: Marcel Eschmann Date: Thu, 14 May 2015 21:10:05 +0200 Subject: [PATCH 1/8] Use global composer install when available --- system/src/Grav/Console/ConsoleTrait.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/system/src/Grav/Console/ConsoleTrait.php b/system/src/Grav/Console/ConsoleTrait.php index a2e80b6e8..e848b2260 100644 --- a/system/src/Grav/Console/ConsoleTrait.php +++ b/system/src/Grav/Console/ConsoleTrait.php @@ -85,7 +85,12 @@ trait ConsoleTrait public function composerUpdate($path, $action = 'install') { - return system('php bin/composer.phar --working-dir="'.$path.'" --no-interaction --no-dev --prefer-dist -o '. $action); + $composer = shell_exec("which composer"); + if (!$composer || !preg_match('/(composer|composer\.phar)$/', $composer)) { + $composer = "bin/composer.phar"; + } + + return system('php '.$composer.' --working-dir="'.$path.'" --no-interaction --no-dev --prefer-dist -o '. $action); } /** From 1f906e6a50b1d8b2220a64cfb117a80231a5ebe7 Mon Sep 17 00:00:00 2001 From: Marcel Eschmann Date: Thu, 14 May 2015 21:37:47 +0200 Subject: [PATCH 2/8] Propagate composer check to all occurences --- bin/gpm | 5 +++- bin/grav | 5 +++- system/src/Grav/Common/Composer.php | 30 ++++++++++++++++++++++++ system/src/Grav/Console/ConsoleTrait.php | 7 ++---- 4 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 system/src/Grav/Common/Composer.php diff --git a/bin/gpm b/bin/gpm index a19fea5d1..1e3376b6b 100755 --- a/bin/gpm +++ b/bin/gpm @@ -6,10 +6,13 @@ if (version_compare($ver = PHP_VERSION, $req = '5.4.0', '<')) { exit(sprintf("You are running PHP %s, but Grav needs at least PHP %s to run.\n", $ver, $req)); } +use Grav\Common\Composer; + if (!file_exists(__DIR__ . '/../vendor')){ // Before we can even start, we need to run composer first + $composer = Composer::getComposerLocation(); echo "Preparing to install vendor dependencies...\n\n"; - echo system('php bin/composer.phar --working-dir="'.__DIR__.'/../" --no-interaction --no-dev --prefer-dist -o install'); + echo system('php '.$composer.' --working-dir="'.__DIR__.'/../" --no-interaction --no-dev --prefer-dist -o install'); echo "\n\n"; } diff --git a/bin/grav b/bin/grav index 1d31dd687..dc839c328 100755 --- a/bin/grav +++ b/bin/grav @@ -6,10 +6,13 @@ if (version_compare($ver = PHP_VERSION, $req = '5.4.0', '<')) { exit(sprintf("You are running PHP %s, but Grav needs at least PHP %s to run.\n", $ver, $req)); } +use Grav\Common\Composer; + if (!file_exists(__DIR__ . '/../vendor')){ // Before we can even start, we need to run composer first + $composer = Composer::getComposerLocation(); echo "Preparing to install vendor dependencies...\n\n"; - echo system('php bin/composer.phar --working-dir="'.__DIR__.'/../" --no-interaction --no-dev --prefer-dist -o install'); + echo system('php '.$composer.' --working-dir="'.__DIR__.'/../" --no-interaction --no-dev --prefer-dist -o install'); echo "\n\n"; } diff --git a/system/src/Grav/Common/Composer.php b/system/src/Grav/Common/Composer.php new file mode 100644 index 000000000..947b66313 --- /dev/null +++ b/system/src/Grav/Common/Composer.php @@ -0,0 +1,30 @@ + Date: Thu, 14 May 2015 23:32:16 +0200 Subject: [PATCH 3/8] Fix line break in command --- system/src/Grav/Common/Composer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/src/Grav/Common/Composer.php b/system/src/Grav/Common/Composer.php index 947b66313..991983d58 100644 --- a/system/src/Grav/Common/Composer.php +++ b/system/src/Grav/Common/Composer.php @@ -18,7 +18,7 @@ class Composer public static function getComposerLocation() { // check for global composer install - $path = shell_exec("which composer"); + $path = trim(shell_exec("which composer")); // fall back to grav bundled composer if (!$path || !preg_match('/(composer|composer\.phar)$/', $path)) { From c0855401435005b7c50fe296626004a33bf11013 Mon Sep 17 00:00:00 2001 From: Marcel Eschmann Date: Thu, 14 May 2015 23:56:55 +0200 Subject: [PATCH 4/8] Improve composer location identification --- system/src/Grav/Common/Composer.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/system/src/Grav/Common/Composer.php b/system/src/Grav/Common/Composer.php index 991983d58..d0e181c70 100644 --- a/system/src/Grav/Common/Composer.php +++ b/system/src/Grav/Common/Composer.php @@ -17,8 +17,12 @@ class Composer */ public static function getComposerLocation() { + if (!function_exists('shell_exec')) { + return "bin/composer.phar"; + } + // check for global composer install - $path = trim(shell_exec("which composer")); + $path = trim(shell_exec("command -v composer")); // fall back to grav bundled composer if (!$path || !preg_match('/(composer|composer\.phar)$/', $path)) { From 3c51c0acd45aaa6bad96a68d67e7f501b406e82e Mon Sep 17 00:00:00 2001 From: Marcel Eschmann Date: Fri, 15 May 2015 00:03:48 +0200 Subject: [PATCH 5/8] Move default location to class constant --- system/src/Grav/Common/Composer.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/system/src/Grav/Common/Composer.php b/system/src/Grav/Common/Composer.php index d0e181c70..b6b23cc57 100644 --- a/system/src/Grav/Common/Composer.php +++ b/system/src/Grav/Common/Composer.php @@ -10,6 +10,9 @@ namespace Grav\Common; */ class Composer { + /** @const Default composer location */ + const DEFAULT_PATH = "bin/composer.phar"; + /** * Returns the location of composer. * @@ -18,7 +21,7 @@ class Composer public static function getComposerLocation() { if (!function_exists('shell_exec')) { - return "bin/composer.phar"; + return self::DEFAULT_PATH; } // check for global composer install @@ -26,7 +29,7 @@ class Composer // fall back to grav bundled composer if (!$path || !preg_match('/(composer|composer\.phar)$/', $path)) { - $path = "bin/composer.phar"; + $path = self::DEFAULT_PATH; } return $path; From d8df9ffb53999b362e6dab7dc5d1163412bd1822 Mon Sep 17 00:00:00 2001 From: Marcel Eschmann Date: Fri, 15 May 2015 00:20:08 +0200 Subject: [PATCH 6/8] Remove unnecessary white space --- system/src/Grav/Common/Composer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/src/Grav/Common/Composer.php b/system/src/Grav/Common/Composer.php index b6b23cc57..25bf8fc0c 100644 --- a/system/src/Grav/Common/Composer.php +++ b/system/src/Grav/Common/Composer.php @@ -29,7 +29,7 @@ class Composer // fall back to grav bundled composer if (!$path || !preg_match('/(composer|composer\.phar)$/', $path)) { - $path = self::DEFAULT_PATH; + $path = self::DEFAULT_PATH; } return $path; From e883b57ac6de6c4d86fa94c145a9f70ebc6ab5dd Mon Sep 17 00:00:00 2001 From: Gert Date: Fri, 15 May 2015 19:54:33 +0200 Subject: [PATCH 7/8] fix composer execution for various scenarios --- bin/gpm | 8 ++++++-- bin/grav | 8 ++++++-- system/src/Grav/Common/Composer.php | 20 +++++++++++++++++++- system/src/Grav/Console/ConsoleTrait.php | 5 +++-- 4 files changed, 34 insertions(+), 7 deletions(-) diff --git a/bin/gpm b/bin/gpm index 1e3376b6b..5a039e597 100755 --- a/bin/gpm +++ b/bin/gpm @@ -6,13 +6,17 @@ if (version_compare($ver = PHP_VERSION, $req = '5.4.0', '<')) { exit(sprintf("You are running PHP %s, but Grav needs at least PHP %s to run.\n", $ver, $req)); } +if (!file_exists(__DIR__ . '/../vendor')){ + require_once __DIR__ . '/../system/src/Grav/Common/Composer.php'; +} + use Grav\Common\Composer; if (!file_exists(__DIR__ . '/../vendor')){ // Before we can even start, we need to run composer first - $composer = Composer::getComposerLocation(); + $composer = Composer::getComposerExecutor(); echo "Preparing to install vendor dependencies...\n\n"; - echo system('php '.$composer.' --working-dir="'.__DIR__.'/../" --no-interaction --no-dev --prefer-dist -o install'); + echo system($composer.' --working-dir="'.__DIR__.'/../" --no-interaction --no-dev --prefer-dist -o install'); echo "\n\n"; } diff --git a/bin/grav b/bin/grav index dc839c328..fb101b78f 100755 --- a/bin/grav +++ b/bin/grav @@ -6,13 +6,17 @@ if (version_compare($ver = PHP_VERSION, $req = '5.4.0', '<')) { exit(sprintf("You are running PHP %s, but Grav needs at least PHP %s to run.\n", $ver, $req)); } +if (!file_exists(__DIR__ . '/../vendor')){ + require_once __DIR__ . '/../system/src/Grav/Common/Composer.php'; +} + use Grav\Common\Composer; if (!file_exists(__DIR__ . '/../vendor')){ // Before we can even start, we need to run composer first - $composer = Composer::getComposerLocation(); + $composer = Composer::getComposerExecutor(); echo "Preparing to install vendor dependencies...\n\n"; - echo system('php '.$composer.' --working-dir="'.__DIR__.'/../" --no-interaction --no-dev --prefer-dist -o install'); + echo system($composer.' --working-dir="'.__DIR__.'/../" --no-interaction --no-dev --prefer-dist -o install'); echo "\n\n"; } diff --git a/system/src/Grav/Common/Composer.php b/system/src/Grav/Common/Composer.php index 25bf8fc0c..bda847eef 100644 --- a/system/src/Grav/Common/Composer.php +++ b/system/src/Grav/Common/Composer.php @@ -20,7 +20,7 @@ class Composer */ public static function getComposerLocation() { - if (!function_exists('shell_exec')) { + if (!function_exists('shell_exec') || strtolower(substr(PHP_OS, 0, 3)) === 'win') { return self::DEFAULT_PATH; } @@ -34,4 +34,22 @@ class Composer return $path; } + + public static function getComposerExecutor() + { + $executor = 'php '; + $composer = static::getComposerLocation(); + + if ($composer !== static::DEFAULT_PATH && is_executable($composer)) { + $file = fopen($composer, 'r'); + $firstLine = fgets($file); + fclose($file); + + if (!preg_match('/^#!.+php/i', $firstLine)) { + $executor = ''; + } + } + + return $executor . $composer; + } } diff --git a/system/src/Grav/Console/ConsoleTrait.php b/system/src/Grav/Console/ConsoleTrait.php index 45800b68d..233a5da79 100644 --- a/system/src/Grav/Console/ConsoleTrait.php +++ b/system/src/Grav/Console/ConsoleTrait.php @@ -86,8 +86,9 @@ trait ConsoleTrait public function composerUpdate($path, $action = 'install') { - $composer = Composer::getComposerLocation(); - return system('php '.$composer.' --working-dir="'.$path.'" --no-interaction --no-dev --prefer-dist -o '. $action); + $composer = Composer::getComposerExecutor(); + + return system($composer . ' --working-dir="'.$path.'" --no-interaction --no-dev --prefer-dist -o '. $action); } /** From 81bce07a6e9b64eda3d8c8af5225e02739759e2e Mon Sep 17 00:00:00 2001 From: Gert Date: Fri, 15 May 2015 20:16:42 +0200 Subject: [PATCH 8/8] use PHP_BINARY constant --- system/src/Grav/Common/Composer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/src/Grav/Common/Composer.php b/system/src/Grav/Common/Composer.php index bda847eef..5efde8912 100644 --- a/system/src/Grav/Common/Composer.php +++ b/system/src/Grav/Common/Composer.php @@ -37,7 +37,7 @@ class Composer public static function getComposerExecutor() { - $executor = 'php '; + $executor = PHP_BINARY . ' '; $composer = static::getComposerLocation(); if ($composer !== static::DEFAULT_PATH && is_executable($composer)) {