From 1e82300a7e3d5c79fc141da6f5b4c29c0155eae0 Mon Sep 17 00:00:00 2001 From: Marcelo Santos Date: Sat, 30 Sep 2017 23:55:29 +0200 Subject: [PATCH] Added the phpcs as a dependency and removed the tmp folder from the output --- .gitignore | 1 + README.md | 40 ++++++++++++------- composer.json | 3 +- output.png | Bin 0 -> 72103 bytes src/.idea/scopes/scope_settings.xml | 5 --- src/Melody/Diffcs/Command/DiffcsCommand.php | 42 +++++++++++++++++++- src/Melody/Diffcs/DiffcsApplication.php | 4 +- src/Melody/Diffcs/Executor.php | 41 ++++++++++++------- 8 files changed, 97 insertions(+), 39 deletions(-) create mode 100644 output.png delete mode 100644 src/.idea/scopes/scope_settings.xml diff --git a/.gitignore b/.gitignore index 5708e16..6a78056 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ composer.lock vendor/* +.idea/* diff --git a/README.md b/README.md index feb4895..c90dccb 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,31 @@ # DiffCS -A tool to perform PSR-2 check into your pull requests on Github. +A tool to perform code sniffer checks of your pull requests on Github. ## How To Install -Through **Composer**: +You can grab a copy of marcelsud/diffcs in either of the following ways: -``` -composer global require "marcelsud/diffcs":"dev-master" -``` +### As a phar (recommended) -We suggest you to use `global` requirement, so you can use for all projects. - -Or cloning this project: +You can simply download a pre-compiled and ready-to-use version as a Phar to any directory. Simply download the latest diffcs.phar file from our [releases page](https://github.com/marcelsud/diffcs/releases): ``` -git clone git@github.com:marcelsud/diffcs.git +curl -LO https://github.com/marcelsud/diffcs/releases/download/v0.2.0/diffcs.phar +php diffcs.phar --help ``` -Once it's done, go to the root folder and execute: +Optionally you can install it globally by adding it to your bin folder: ``` -composer install +chmod +x diffcs.phar +mv diffcs.phar /usr/local/bin/diffcs ``` -Then, run the following command to use this tool through your `bin` folder: +### Via composer: ``` +composer global require "marcelsud/diffcs":"dev-master" sudo ln -nfs ~/.composer/vendor/bin/diffcs /usr/local/bin/diffcs ``` @@ -48,16 +47,27 @@ diffcs symfony/symfony 13342 ### For private repositories: +#### Authenticate with username and password Execute following command: `diffcs / --github-user=`, where: - `` is your Github username. +- the password will be asked afterwards and is only required check private repositories. **Example**: ``` -diffcs symfony/symfony 13342 --github-user=seuusuario +diffcs symfony/symfony 13342 --github-user=yourusername ``` -Once you run this command, provide your Github password. **The password is only required to authenticate your credentials into the private repository.** +#### Authenticate with Github token +Execute following command: `diffcs / --github-token=`, where: + +- you can generate the `` in [your Github account settings](https://github.com/settings/tokens/new?scopes=repo&description=Diffcs%20token)). + +**Example**: + +``` +diffcs symfony/symfony 13342 --github-token=256199c24f9132f84e9bb06271ff65a3176a2f05 +``` -![Image](https://41.media.tumblr.com/df1e6041b827dc067d1c4c16ffb3df05/tumblr_nldnzr0w011sr73oio1_1280.png) +![Image](output.png) diff --git a/composer.json b/composer.json index f68399f..533f9a8 100644 --- a/composer.json +++ b/composer.json @@ -7,7 +7,8 @@ "require": { "knplabs/github-api": "~1.2", "league/flysystem": "0.5.*", - "symfony/console": "v2.6.3" + "symfony/console": "v2.6.3", + "squizlabs/php_codesniffer": "~3.1" }, "authors": [ { diff --git a/output.png b/output.png new file mode 100644 index 0000000000000000000000000000000000000000..487441d3dc96aedc722ec31bdbcb3517cb7130e0 GIT binary patch literal 72103 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 z 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�J8?$iFhYpOo)W-`JQ?D6pyNi{{y?w?*b8I^_ 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 WQKVcErp?TuM-Lw>L+)F>{C@z=wvu)L literal 0 HcmV?d00001 diff --git a/src/.idea/scopes/scope_settings.xml b/src/.idea/scopes/scope_settings.xml deleted file mode 100644 index 922003b..0000000 --- a/src/.idea/scopes/scope_settings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/Melody/Diffcs/Command/DiffcsCommand.php b/src/Melody/Diffcs/Command/DiffcsCommand.php index d3ad416..7c2a83a 100644 --- a/src/Melody/Diffcs/Command/DiffcsCommand.php +++ b/src/Melody/Diffcs/Command/DiffcsCommand.php @@ -25,6 +25,10 @@ class DiffcsCommand extends Command * @var string */ const REPOSITORY_ARGUMENT = "repository"; + /** + * @var string + */ + const CODE_STANDARD_OPTION = "code-standard"; /** * @var string */ @@ -52,6 +56,13 @@ protected function configure() InputArgument::REQUIRED, 'The pull request id' ) + ->addOption( + self::CODE_STANDARD_OPTION, + 'cs', + InputOption::VALUE_OPTIONAL, + 'The github token to access private repositories', + 'PSR2' + ) ->addOption( self::GITHUB_TOKEN_OPTION, null, @@ -80,6 +91,8 @@ protected function execute(InputInterface $input, OutputInterface $output) $githubUser = $input->getOption(self::GITHUB_USER_OPTION); $githubPass = false; + $codeStandard = $input->getOption(self::CODE_STANDARD_OPTION); + if (!empty($githubUser)) { $helper = $this->getHelper('question'); @@ -101,15 +114,42 @@ protected function execute(InputInterface $input, OutputInterface $output) $output, $owner, $repository, + $codeStandard, $githubToken, $githubUser, $githubPass ); + $output->writeln( + ' ' + ); + $output->writeln( + ' PHP DIFF CS (CODE STANDARD) ' + ); + $output->writeln( + ' ' + ); + + $output->writeln(''); + $output->writeln( + 'Project: ' + .$input->getArgument(self::REPOSITORY_ARGUMENT) + .'' + ); + $output->writeln( + 'Pull Request: #'.$pullRequestId.'' + ); + $output->writeln( + 'Code Standard: '.$codeStandard.'' + ); + $output->writeln(''); + try { $results = $executor->execute($pullRequestId); } catch (\Exception $e) { - die("ERROR: " . $e->getMessage() . PHP_EOL); + $output->writeln('ERROR: '.$e->getMessage()); + + die(); } if (count($results)) { diff --git a/src/Melody/Diffcs/DiffcsApplication.php b/src/Melody/Diffcs/DiffcsApplication.php index 8dfee72..2427a0d 100644 --- a/src/Melody/Diffcs/DiffcsApplication.php +++ b/src/Melody/Diffcs/DiffcsApplication.php @@ -8,7 +8,7 @@ /** * Class DiffcsApplication - * + * * @author Marcelo Santos */ class DiffcsApplication extends Application @@ -50,4 +50,4 @@ public function getDefinition() return $inputDefinition; } -} \ No newline at end of file +} diff --git a/src/Melody/Diffcs/Executor.php b/src/Melody/Diffcs/Executor.php index 2545229..1190fca 100644 --- a/src/Melody/Diffcs/Executor.php +++ b/src/Melody/Diffcs/Executor.php @@ -37,11 +37,16 @@ class Executor * @var type */ protected $progress; + /** + * @var string + */ + protected $codeStandard; /** * @param \Symfony\Component\Console\Output\OutputInterface $output * @param string $owner * @param string $repository + * @param string $codeStandard * @param bool $githubToken Optional. * @param bool $githubUser Optional. * @param bool $githubPass Optional. @@ -50,6 +55,7 @@ public function __construct( $output, $owner, $repository, + $codeStandard, $githubToken = false, $githubUser = false, $githubPass = false @@ -60,6 +66,7 @@ public function __construct( $this->githubUser = $githubUser; $this->githubPass = $githubPass; $this->repository = $repository; + $this->codeStandard = $codeStandard; $this->client = new \Github\Client(); $this->filesystem = new Filesystem(new Adapter(sys_get_temp_dir())); } @@ -89,9 +96,9 @@ public function execute($pullRequestId) $this->repository, $pullRequestId ); - - $downloadedFiles = $this->downloadFiles($files, $pullRequest["head"]["sha"]); + $downloadedFiles = $this->downloadFiles($files, $pullRequest["head"]["sha"]); + return $this->runCodeSniffer($downloadedFiles); } @@ -126,16 +133,13 @@ public function authenticateWithPassword() */ public function downloadFiles($files, $commitId) { - $progress = new ProgressBar($this->output, count($files)); - $progress->setProgressCharacter('|'); - $progress->start(); $downloadedFiles = []; - + foreach ($files as $file) { - if (!preg_match('/src\/.*\.php$/', $file['filename'] || $file['status'] === "removed")) { + if (!preg_match('/.*\.php$/', $file['filename']) || $file['status'] === "removed") { continue; } - + $fileContent = $this->client->api('repo')->contents()->download( $this->owner, $this->repository, @@ -147,11 +151,8 @@ public function downloadFiles($files, $commitId) $this->filesystem->put($file, $fileContent); $downloadedFiles[] = $file; - $progress->advance(); } - $progress->finish(); - return $downloadedFiles; } @@ -161,25 +162,35 @@ public function downloadFiles($files, $commitId) */ public function runCodeSniffer($downloadedFiles) { + $progress = new ProgressBar($this->output, count($downloadedFiles)); + $progress->setProgressCharacter('|'); + $progress->start(); + $outputs = []; - + foreach ($downloadedFiles as $file) { - if (!preg_match('/src\/.*\.php$/', $file)) { + if (!preg_match('/.*\.php$/', $file)) { continue; } $command = sprintf( - "phpcs %s/%s --standard=PSR2", + "vendor/bin/phpcs %s/%s --standard=%s", sys_get_temp_dir(), - $file + $file, + $this->codeStandard ); $output = shell_exec($command); + $output = str_replace('/tmp/tmp/', '', $output); if (!empty($output)) { $outputs[] = $output; } + + $progress->advance(); } + + $progress->finish(); return $outputs; }