From d7db9cf593b54a5e17dc59cc5d21a50e85a013f6 Mon Sep 17 00:00:00 2001 From: Corpsee Date: Fri, 9 May 2014 14:57:22 +0700 Subject: [PATCH 1/6] Few fixes for windows --- PHPCI/Plugin/CleanBuild.php | 3 +++ PHPCI/Plugin/CopyBuild.php | 6 ++++++ PHPCI/Plugin/Wipe.php | 5 ++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/PHPCI/Plugin/CleanBuild.php b/PHPCI/Plugin/CleanBuild.php index 73a7305f..38c1ccde 100644 --- a/PHPCI/Plugin/CleanBuild.php +++ b/PHPCI/Plugin/CleanBuild.php @@ -38,6 +38,9 @@ class CleanBuild implements \PHPCI\Plugin public function execute() { $cmd = 'rm -Rf "%s"'; + if (IS_WIN) { + $cmd = 'rmdir /S /Q "%s"'; + } $this->phpci->executeCommand($cmd, $this->phpci->buildPath . 'composer.phar'); $this->phpci->executeCommand($cmd, $this->phpci->buildPath . 'composer.lock'); diff --git a/PHPCI/Plugin/CopyBuild.php b/PHPCI/Plugin/CopyBuild.php index 021d5e80..83ed6ebe 100644 --- a/PHPCI/Plugin/CopyBuild.php +++ b/PHPCI/Plugin/CopyBuild.php @@ -46,11 +46,17 @@ class CopyBuild implements \PHPCI\Plugin } $cmd = 'mkdir -p "%s" && cp -R "%s" "%s"'; + if (IS_WIN) { + $cmd = 'mkdir -p "%s" && xcopy /E "%s" "%s"'; + } $success = $this->phpci->executeCommand($cmd, $this->directory, $build, $this->directory); if ($this->ignore) { foreach ($this->phpci->ignore as $file) { $cmd = 'rm -Rf "%s/%s"'; + if (IS_WIN) { + $cmd = 'rmdir /S /Q "%s\%s"'; + } $this->phpci->executeCommand($cmd, $this->directory, $file); } } diff --git a/PHPCI/Plugin/Wipe.php b/PHPCI/Plugin/Wipe.php index 7a0c2107..4d55009c 100644 --- a/PHPCI/Plugin/Wipe.php +++ b/PHPCI/Plugin/Wipe.php @@ -52,7 +52,10 @@ class Wipe implements \PHPCI\Plugin return true; } if (is_dir($this->directory)) { - $cmd = 'rm -rf %s*'; + $cmd = 'rm -Rf "%s"'; + if (IS_WIN) { + $cmd = 'rmdir /S /Q "%s"'; + } $success = $this->phpci->executeCommand($cmd, $this->directory); } return $success; From 2d52c8dd0127b68f15eb0a88c5b6e1f3fbcbdcc6 Mon Sep 17 00:00:00 2001 From: Corpsee Date: Fri, 9 May 2014 15:21:53 +0700 Subject: [PATCH 2/6] Fixed phpdocs --- PHPCI/Helper/CommandExecutor.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/PHPCI/Helper/CommandExecutor.php b/PHPCI/Helper/CommandExecutor.php index dc284b6a..46bead2f 100644 --- a/PHPCI/Helper/CommandExecutor.php +++ b/PHPCI/Helper/CommandExecutor.php @@ -2,7 +2,6 @@ namespace PHPCI\Helper; - use \PHPCI\Logging\BuildLogger; use Psr\Log\LogLevel; @@ -36,9 +35,9 @@ class CommandExecutor /** * @param BuildLogger $logger - * @param $rootDir - * @param bool $quiet - * @param bool $verbose + * @param string $rootDir + * @param bool $quiet + * @param bool $verbose */ public function __construct(BuildLogger $logger, $rootDir, &$quiet = false, &$verbose = false) { @@ -106,7 +105,7 @@ class CommandExecutor /** * Find a binary required by a plugin. - * @param $binary + * @param string $binary * @return null|string */ public function findBinary($binary) From b3cf244944c85b4f3f0a244d08eff82a2d36bf89 Mon Sep 17 00:00:00 2001 From: Corpsee Date: Fri, 9 May 2014 15:23:30 +0700 Subject: [PATCH 3/6] Added CommandExecutorInterface --- PHPCI/Helper/CommandExecutorInterface.php | 35 +++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 PHPCI/Helper/CommandExecutorInterface.php diff --git a/PHPCI/Helper/CommandExecutorInterface.php b/PHPCI/Helper/CommandExecutorInterface.php new file mode 100644 index 00000000..8e75b166 --- /dev/null +++ b/PHPCI/Helper/CommandExecutorInterface.php @@ -0,0 +1,35 @@ + Date: Fri, 9 May 2014 19:09:27 +0700 Subject: [PATCH 4/6] Separeted CommandExecutor for different OS --- PHPCI/Builder.php | 9 +- PHPCI/Helper/BaseCommandExecutor.php | 127 ++++++++++++++++++++++ PHPCI/Helper/CommandExecutor.php | 112 ++----------------- PHPCI/Helper/CommandExecutorInterface.php | 35 ------ PHPCI/Helper/UnixCommandExecutor.php | 33 ++++++ PHPCI/Helper/WindowsCommandExecutor.php | 33 ++++++ vars.php | 4 - 7 files changed, 206 insertions(+), 147 deletions(-) create mode 100644 PHPCI/Helper/BaseCommandExecutor.php delete mode 100644 PHPCI/Helper/CommandExecutorInterface.php create mode 100644 PHPCI/Helper/UnixCommandExecutor.php create mode 100644 PHPCI/Helper/WindowsCommandExecutor.php diff --git a/PHPCI/Builder.php b/PHPCI/Builder.php index 69db31e1..ced3c510 100644 --- a/PHPCI/Builder.php +++ b/PHPCI/Builder.php @@ -10,7 +10,6 @@ namespace PHPCI; use PHPCI\Helper\BuildInterpolator; -use PHPCI\Helper\CommandExecutor; use PHPCI\Helper\MailerFactory; use PHPCI\Logging\BuildLogger; use PHPCI\Model\Build; @@ -118,7 +117,12 @@ class Builder implements LoggerAwareInterface $pluginFactory->addConfigFromFile(PHPCI_DIR . "/pluginconfig.php"); $this->pluginExecutor = new Plugin\Util\Executor($pluginFactory, $this->buildLogger); - $this->commandExecutor = new CommandExecutor( + $executorClass = 'PHPCI\Helper\UnixCommandExecutor'; + if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') { + $executorClass = 'PHPCI\Helper\WindowsCommandExecutor'; + } + + $this->commandExecutor = new $executorClass( $this->buildLogger, PHPCI_DIR, $this->quiet, @@ -126,7 +130,6 @@ class Builder implements LoggerAwareInterface ); $this->interpolator = new BuildInterpolator(); - } /** diff --git a/PHPCI/Helper/BaseCommandExecutor.php b/PHPCI/Helper/BaseCommandExecutor.php new file mode 100644 index 00000000..cc4b8ca0 --- /dev/null +++ b/PHPCI/Helper/BaseCommandExecutor.php @@ -0,0 +1,127 @@ +logger = $logger; + $this->quiet = $quiet; + $this->verbose = $verbose; + + $this->lastOutput = array(); + + $this->rootDir = $rootDir; + } + + /** + * Executes shell commands. + * @param array $args + * @return bool Indicates success + */ + public function executeCommand($args = array()) + { + $this->lastOutput = array(); + + $command = call_user_func_array('sprintf', $args); + + if ($this->quiet) { + $this->logger->log('Executing: ' . $command); + } + + $status = 0; + exec($command, $this->lastOutput, $status); + + foreach ($this->lastOutput as &$lastOutput) { + $lastOutput = trim($lastOutput, '"'); + } + + if ($this->logExecOutput && !empty($this->lastOutput) && ($this->verbose|| $status != 0)) { + $this->logger->log($this->lastOutput); + } + + $rtn = false; + + if ($status == 0) { + $rtn = true; + } + + return $rtn; + } + + /** + * Returns the output from the last command run. + */ + public function getLastOutput() + { + return implode(PHP_EOL, $this->lastOutput); + } + + /** + * Find a binary required by a plugin. + * @param string $binary + * @return null|string + */ + public function findBinary($binary) + { + $binaryPath = null; + + if (is_string($binary)) { + $binary = array($binary); + } + + foreach ($binary as $bin) { + $this->logger->log("Looking for binary: " . $bin, LogLevel::DEBUG); + // Check project root directory: + if (is_file($this->rootDir . $bin)) { + $this->logger->log("Found in root: " . $bin, LogLevel::DEBUG); + $binaryPath = $this->rootDir . $bin; + break; + } + + // Check Composer bin dir: + if (is_file($this->rootDir . 'vendor/bin/' . $bin)) { + $this->logger->log("Found in vendor/bin: " . $bin, LogLevel::DEBUG); + $binaryPath = $this->rootDir . 'vendor/bin/' . $bin; + break; + } + } + return $binaryPath; + } +} diff --git a/PHPCI/Helper/CommandExecutor.php b/PHPCI/Helper/CommandExecutor.php index b008c14e..3dce9a44 100644 --- a/PHPCI/Helper/CommandExecutor.php +++ b/PHPCI/Helper/CommandExecutor.php @@ -3,131 +3,33 @@ namespace PHPCI\Helper; use \PHPCI\Logging\BuildLogger; -use Psr\Log\LogLevel; -class CommandExecutor +interface CommandExecutor { - /** - * @var \PHPCI\Logging\BuildLogger - */ - protected $logger; - - /** - * @var bool - */ - protected $quiet; - - /** - * @var bool - */ - protected $verbose; - - protected $lastOutput; - - public $logExecOutput = true; - - - /** - * The path which findBinary will look in. - * @var string - */ - protected $rootDir; - /** * @param BuildLogger $logger * @param string $rootDir * @param bool $quiet * @param bool $verbose */ - public function __construct(BuildLogger $logger, $rootDir, &$quiet = false, &$verbose = false) - { - $this->logger = $logger; - $this->quiet = $quiet; - $this->verbose = $verbose; - - $this->lastOutput = array(); - - $this->rootDir = $rootDir; - } + public function __construct(BuildLogger $logger, $rootDir, &$quiet = false, &$verbose = false); /** - * Executes shell commands. - * @param array $args + * Executes shell commands. Accepts multiple arguments the first + * is the template and everything else is inserted in. c.f. sprintf * @return bool Indicates success */ - public function executeCommand($args = array()) - { - $this->lastOutput = array(); - - $command = call_user_func_array('sprintf', $args); - - if ($this->quiet) { - $this->logger->log('Executing: ' . $command); - } - - $status = 0; - exec($command, $this->lastOutput, $status); - - foreach ($this->lastOutput as &$lastOutput) { - $lastOutput = trim($lastOutput, '"'); - } - - if ($this->logExecOutput && !empty($this->lastOutput) && ($this->verbose|| $status != 0)) { - $this->logger->log($this->lastOutput); - } - - $rtn = false; - - if ($status == 0) { - $rtn = true; - } - - return $rtn; - } + public function executeCommand(); /** * Returns the output from the last command run. */ - public function getLastOutput() - { - return implode(PHP_EOL, $this->lastOutput); - } + public function getLastOutput(); /** * Find a binary required by a plugin. * @param string $binary * @return null|string */ - public function findBinary($binary) - { - if (is_string($binary)) { - $binary = array($binary); - } - - foreach ($binary as $bin) { - $this->logger->log("Looking for binary: " . $bin, LogLevel::DEBUG); - // Check project root directory: - if (is_file($this->rootDir . $bin)) { - $this->logger->log("Found in root: " . $bin, LogLevel::DEBUG); - return $this->rootDir . $bin; - } - - // Check Composer bin dir: - if (is_file($this->rootDir . 'vendor/bin/' . $bin)) { - $this->logger->log("Found in vendor/bin: " . $bin, LogLevel::DEBUG); - return $this->rootDir . 'vendor/bin/' . $bin; - } - - // Use "where" for windows and "which" for other OS - $findCmd = IS_WIN ? 'where' : 'which'; - $findCmdResult = trim(shell_exec($findCmd . ' ' . $bin)); - - if (!empty($findCmdResult)) { - $this->logger->log("Found in " . $findCmdResult, LogLevel::DEBUG); - return $findCmdResult; - } - } - - return null; - } + public function findBinary($binary); } diff --git a/PHPCI/Helper/CommandExecutorInterface.php b/PHPCI/Helper/CommandExecutorInterface.php deleted file mode 100644 index 8e75b166..00000000 --- a/PHPCI/Helper/CommandExecutorInterface.php +++ /dev/null @@ -1,35 +0,0 @@ -logger->log("Found in " . $findCmdResult, LogLevel::DEBUG); + $binaryPath = $findCmdResult; + break; + } + } + } + return $binaryPath; + } +} diff --git a/PHPCI/Helper/WindowsCommandExecutor.php b/PHPCI/Helper/WindowsCommandExecutor.php new file mode 100644 index 00000000..ad0ce236 --- /dev/null +++ b/PHPCI/Helper/WindowsCommandExecutor.php @@ -0,0 +1,33 @@ +logger->log("Found in " . $findCmdResult, LogLevel::DEBUG); + $binaryPath = $findCmdResult; + break; + } + } + } + return $binaryPath; + } +} diff --git a/vars.php b/vars.php index 2408d41d..5725805e 100644 --- a/vars.php +++ b/vars.php @@ -25,7 +25,3 @@ if (!defined('ENABLE_SHELL_PLUGIN')) { if (!defined('PHPCI_IS_CONSOLE')) { define('PHPCI_IS_CONSOLE', false); } - -if (!defined('IS_WIN')) { - define('IS_WIN', ((strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') ? true : false)); -} From 2476086f7c199966ec5fb3f2a3ce8e5e11687631 Mon Sep 17 00:00:00 2001 From: Corpsee Date: Fri, 9 May 2014 23:55:13 +0700 Subject: [PATCH 5/6] Fixes --- PHPCI/Builder.php | 2 +- vars.php | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/PHPCI/Builder.php b/PHPCI/Builder.php index ced3c510..7365f42f 100644 --- a/PHPCI/Builder.php +++ b/PHPCI/Builder.php @@ -118,7 +118,7 @@ class Builder implements LoggerAwareInterface $this->pluginExecutor = new Plugin\Util\Executor($pluginFactory, $this->buildLogger); $executorClass = 'PHPCI\Helper\UnixCommandExecutor'; - if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') { + if (IS_WIN) { $executorClass = 'PHPCI\Helper\WindowsCommandExecutor'; } diff --git a/vars.php b/vars.php index 5725805e..2408d41d 100644 --- a/vars.php +++ b/vars.php @@ -25,3 +25,7 @@ if (!defined('ENABLE_SHELL_PLUGIN')) { if (!defined('PHPCI_IS_CONSOLE')) { define('PHPCI_IS_CONSOLE', false); } + +if (!defined('IS_WIN')) { + define('IS_WIN', ((strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') ? true : false)); +} From f6d189609668f510a0af28a18ed21be83b1bbd18 Mon Sep 17 00:00:00 2001 From: Corpsee Date: Sun, 11 May 2014 22:38:33 +0700 Subject: [PATCH 6/6] Pull request review fixes --- PHPCI/Helper/BaseCommandExecutor.php | 32 +++------------------- PHPCI/Helper/CommandExecutor.php | 10 ------- PHPCI/Helper/UnixCommandExecutor.php | 35 +++++++++++++++++-------- PHPCI/Helper/WindowsCommandExecutor.php | 35 +++++++++++++++++-------- 4 files changed, 51 insertions(+), 61 deletions(-) diff --git a/PHPCI/Helper/BaseCommandExecutor.php b/PHPCI/Helper/BaseCommandExecutor.php index cc4b8ca0..08364606 100644 --- a/PHPCI/Helper/BaseCommandExecutor.php +++ b/PHPCI/Helper/BaseCommandExecutor.php @@ -3,9 +3,8 @@ namespace PHPCI\Helper; use \PHPCI\Logging\BuildLogger; -use Psr\Log\LogLevel; -class BaseCommandExecutor implements CommandExecutor +abstract class BaseCommandExecutor implements CommandExecutor { /** * @var \PHPCI\Logging\BuildLogger @@ -98,30 +97,5 @@ class BaseCommandExecutor implements CommandExecutor * @param string $binary * @return null|string */ - public function findBinary($binary) - { - $binaryPath = null; - - if (is_string($binary)) { - $binary = array($binary); - } - - foreach ($binary as $bin) { - $this->logger->log("Looking for binary: " . $bin, LogLevel::DEBUG); - // Check project root directory: - if (is_file($this->rootDir . $bin)) { - $this->logger->log("Found in root: " . $bin, LogLevel::DEBUG); - $binaryPath = $this->rootDir . $bin; - break; - } - - // Check Composer bin dir: - if (is_file($this->rootDir . 'vendor/bin/' . $bin)) { - $this->logger->log("Found in vendor/bin: " . $bin, LogLevel::DEBUG); - $binaryPath = $this->rootDir . 'vendor/bin/' . $bin; - break; - } - } - return $binaryPath; - } -} + abstract public function findBinary($binary); +} \ No newline at end of file diff --git a/PHPCI/Helper/CommandExecutor.php b/PHPCI/Helper/CommandExecutor.php index 3dce9a44..633618bb 100644 --- a/PHPCI/Helper/CommandExecutor.php +++ b/PHPCI/Helper/CommandExecutor.php @@ -2,18 +2,8 @@ namespace PHPCI\Helper; -use \PHPCI\Logging\BuildLogger; - interface CommandExecutor { - /** - * @param BuildLogger $logger - * @param string $rootDir - * @param bool $quiet - * @param bool $verbose - */ - public function __construct(BuildLogger $logger, $rootDir, &$quiet = false, &$verbose = false); - /** * Executes shell commands. Accepts multiple arguments the first * is the template and everything else is inserted in. c.f. sprintf diff --git a/PHPCI/Helper/UnixCommandExecutor.php b/PHPCI/Helper/UnixCommandExecutor.php index 208ebb33..5ab0fbc0 100644 --- a/PHPCI/Helper/UnixCommandExecutor.php +++ b/PHPCI/Helper/UnixCommandExecutor.php @@ -2,6 +2,8 @@ namespace PHPCI\Helper; +use Psr\Log\LogLevel; + class UnixCommandExecutor extends BaseCommandExecutor { /** @@ -11,21 +13,32 @@ class UnixCommandExecutor extends BaseCommandExecutor */ public function findBinary($binary) { - $binaryPath = parent::findBinary($binary); - if (is_null($binaryPath)) { + $binaryPath = null; - if (is_string($binary)) { - $binary = array($binary); + if (is_string($binary)) { + $binary = array($binary); + } + + foreach ($binary as $bin) { + $this->logger->log("Looking for binary: " . $bin, LogLevel::DEBUG); + + if (is_file($this->rootDir . $bin)) { + $this->logger->log("Found in root: " . $bin, LogLevel::DEBUG); + $binaryPath = $this->rootDir . $bin; + break; } - foreach ($binary as $bin) { - $findCmdResult = trim(shell_exec('which ' . $bin)); + if (is_file($this->rootDir . 'vendor/bin/' . $bin)) { + $this->logger->log("Found in vendor/bin: " . $bin, LogLevel::DEBUG); + $binaryPath = $this->rootDir . 'vendor/bin/' . $bin; + break; + } - if (!empty($findCmdResult)) { - $this->logger->log("Found in " . $findCmdResult, LogLevel::DEBUG); - $binaryPath = $findCmdResult; - break; - } + $findCmdResult = trim(shell_exec('which ' . $bin)); + if (!empty($findCmdResult)) { + $this->logger->log("Found in " . $findCmdResult, LogLevel::DEBUG); + $binaryPath = $findCmdResult; + break; } } return $binaryPath; diff --git a/PHPCI/Helper/WindowsCommandExecutor.php b/PHPCI/Helper/WindowsCommandExecutor.php index ad0ce236..83136d2a 100644 --- a/PHPCI/Helper/WindowsCommandExecutor.php +++ b/PHPCI/Helper/WindowsCommandExecutor.php @@ -2,6 +2,8 @@ namespace PHPCI\Helper; +use Psr\Log\LogLevel; + class WindowsCommandExecutor extends BaseCommandExecutor { /** @@ -11,21 +13,32 @@ class WindowsCommandExecutor extends BaseCommandExecutor */ public function findBinary($binary) { - $binaryPath = parent::findBinary($binary); - if (is_null($binaryPath)) { + $binaryPath = null; - if (is_string($binary)) { - $binary = array($binary); + if (is_string($binary)) { + $binary = array($binary); + } + + foreach ($binary as $bin) { + $this->logger->log("Looking for binary: " . $bin, LogLevel::DEBUG); + + if (is_file($this->rootDir . $bin)) { + $this->logger->log("Found in root: " . $bin, LogLevel::DEBUG); + $binaryPath = $this->rootDir . $bin; + break; } - foreach ($binary as $bin) { - $findCmdResult = trim(shell_exec('where ' . $bin)); + if (is_file($this->rootDir . 'vendor/bin/' . $bin)) { + $this->logger->log("Found in vendor/bin: " . $bin, LogLevel::DEBUG); + $binaryPath = $this->rootDir . 'vendor/bin/' . $bin; + break; + } - if (!empty($findCmdResult)) { - $this->logger->log("Found in " . $findCmdResult, LogLevel::DEBUG); - $binaryPath = $findCmdResult; - break; - } + $findCmdResult = trim(shell_exec('where ' . $bin)); + if (!empty($findCmdResult)) { + $this->logger->log("Found in " . $findCmdResult, LogLevel::DEBUG); + $binaryPath = $findCmdResult; + break; } } return $binaryPath;