From dd3671186fd4a93385698077b7477adce33131b8 Mon Sep 17 00:00:00 2001 From: japaveh Date: Sat, 13 Jul 2013 00:19:43 +0200 Subject: [PATCH] Included support for PhpLoc and Pdepend --- PHPCI/Plugin/Pdepend.php | 104 +++++++++++++++++++++++++++++++++++++++ PHPCI/Plugin/PhpLoc.php | 52 ++++++++++++++++++++ composer.json | 3 +- 3 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 PHPCI/Plugin/Pdepend.php create mode 100644 PHPCI/Plugin/PhpLoc.php diff --git a/PHPCI/Plugin/Pdepend.php b/PHPCI/Plugin/Pdepend.php new file mode 100644 index 00000000..95a7a8c0 --- /dev/null +++ b/PHPCI/Plugin/Pdepend.php @@ -0,0 +1,104 @@ + + * @package PHPCI + * @subpackage Plugins + */ +class Pdepend implements \PHPCI\Plugin +{ + protected $args; + /** + * @var \PHPCI\Builder + */ + protected $phpci; + /** + * @var string Directory which needs to be scanned + */ + protected $directory; + /** + * @var string File where the summary.xml is stored + */ + protected $summary; + /** + * @var string File where the chart.svg is stored + */ + protected $chart; + /** + * @var string File where the pyramid.svg is stored + */ + protected $pyramid; + /** + * @var string Location on the server where the files are stored. Preferably in the webroot for inclusion + * in the readme.md of the repository + */ + protected $location; + + + public function __construct(\PHPCI\Builder $phpci, array $options = array()) + { + $this->phpci = $phpci; + + $this->directory = isset($options['directory']) ? $options['directory'] : $phpci->buildPath; + + $this->summary = $phpci->getBuildProjectTitle() . '-summary.xml'; + $this->pyramid = $phpci->getBuildProjectTitle() . '-pyramid.svg'; + $this->chart = $phpci->getBuildProjectTitle() . '-chart.svg'; + $this->location = $this->phpci->buildPath . '..' . DIRECTORY_SEPARATOR . 'pdepend'; + } + + /** + * Runs Pdepend with the given criteria as arguments + */ + public function execute() + { + if (!is_writable($this->location)) { + throw new \Exception(sprintf('The location %s is not writable.', $this->location)); + } + + $cmd = PHPCI_BIN_DIR . 'pdepend --summary-xml=%s --jdepend-chart=%s --overview-pyramid=%s "%s"'; + + //Remove the created files first + unlink($this->location . DIRECTORY_SEPARATOR . $this->summary); + unlink($this->location . DIRECTORY_SEPARATOR . $this->chart); + unlink($this->location . DIRECTORY_SEPARATOR . $this->pyramid); + + $success = $this->phpci->executeCommand( + $cmd, + $this->location . DIRECTORY_SEPARATOR . $this->summary, + $this->location . DIRECTORY_SEPARATOR . $this->chart, + $this->location . DIRECTORY_SEPARATOR . $this->pyramid, + $this->directory + ); + + $config = $this->phpci->getSystemConfig('phpci'); + + if ($success) { + $this->phpci->logSuccess( + sprintf( + "Pdepend successful. You can use %s\n, ![Chart](%s \"Pdepend Chart\")\n + and ![Pyramid](%s \"Pdepend Pyramid\")\n + for inclusion in the readme.md file", + $config['url'] . '/build/pdepend/' . $this->summary, + $config['url'] . '/build/pdepend/' . $this->chart, + $config['url'] . '/build/pdepend/' . $this->pyramid + ) + ); + } else { + $this->phpci->logFailure(sprintf("The function '%s' failed")); + } + + + return $success; + } +} \ No newline at end of file diff --git a/PHPCI/Plugin/PhpLoc.php b/PHPCI/Plugin/PhpLoc.php new file mode 100644 index 00000000..0ae62200 --- /dev/null +++ b/PHPCI/Plugin/PhpLoc.php @@ -0,0 +1,52 @@ + + * @package PHPCI + * @subpackage Plugins + */ +class PhpLoc implements \PHPCI\Plugin +{ + /** + * @var string + */ + protected $directory; + /** + * @var \PHPCI\Builder + */ + protected $phpci; + + public function __construct(\PHPCI\Builder $phpci, array $options = array()) + { + $this->phpci = $phpci; + $this->directory = isset($options['directory']) ? $options['directory'] : $phpci->buildPath; + } + + /** + * Runs PHP Copy/Paste Detector in a specified directory. + */ + public function execute() + { + $ignore = ''; + if (count($this->phpci->ignore)) { + $map = function ($item) { + return ' --exclude ' . (substr($item, -1) == '/' ? substr($item, 0, -1) : $item); + }; + $ignore = array_map($map, $this->phpci->ignore); + + $ignore = implode('', $ignore); + } + + return $this->phpci->executeCommand(PHPCI_BIN_DIR . 'phploc %s "%s"', $ignore, $this->phpci->buildPath); + } +} \ No newline at end of file diff --git a/composer.json b/composer.json index a4424830..a6368878 100644 --- a/composer.json +++ b/composer.json @@ -33,6 +33,7 @@ "symfony/yaml" : "2.2.x-dev", "symfony/console" : "2.2.*", "fabpot/php-cs-fixer" : "0.3.*@dev", - "swiftmailer/swiftmailer" : "v5.0.0" + "swiftmailer/swiftmailer" : "v5.0.0", + "phploc/phploc": "*" } }