annotate vendor/squizlabs/php_codesniffer/CodeSniffer/Reports/Gitblame.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children
rev   line source
Chris@0 1 <?php
Chris@0 2 /**
Chris@0 3 * Gitblame report for PHP_CodeSniffer.
Chris@0 4 *
Chris@0 5 * PHP version 5
Chris@0 6 *
Chris@0 7 * @category PHP
Chris@0 8 * @package PHP_CodeSniffer
Chris@0 9 * @author Ben Selby <benmatselby@gmail.com>
Chris@0 10 * @copyright 2009-2014 SQLI <www.sqli.com>
Chris@0 11 * @copyright 2006-2014 Squiz Pty Ltd (ABN 77 084 670 600)
Chris@0 12 * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence
Chris@0 13 * @link http://pear.php.net/package/PHP_CodeSniffer
Chris@0 14 */
Chris@0 15
Chris@0 16 /**
Chris@0 17 * Gitblame report for PHP_CodeSniffer.
Chris@0 18 *
Chris@0 19 * PHP version 5
Chris@0 20 *
Chris@0 21 * @category PHP
Chris@0 22 * @package PHP_CodeSniffer
Chris@0 23 * @author Ben Selby <benmatselby@gmail.com>
Chris@0 24 * @copyright 2009-2014 SQLI <www.sqli.com>
Chris@0 25 * @copyright 2006-2014 Squiz Pty Ltd (ABN 77 084 670 600)
Chris@0 26 * @license https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt BSD Licence
Chris@0 27 * @version Release: 1.2.2
Chris@0 28 * @link http://pear.php.net/package/PHP_CodeSniffer
Chris@0 29 */
Chris@0 30 class PHP_CodeSniffer_Reports_Gitblame extends PHP_CodeSniffer_Reports_VersionControl
Chris@0 31 {
Chris@0 32
Chris@0 33 /**
Chris@0 34 * The name of the report we want in the output
Chris@0 35 *
Chris@0 36 * @var string
Chris@0 37 */
Chris@0 38 protected $reportName = 'GIT';
Chris@0 39
Chris@0 40
Chris@0 41 /**
Chris@0 42 * Extract the author from a blame line.
Chris@0 43 *
Chris@0 44 * @param string $line Line to parse.
Chris@0 45 *
Chris@0 46 * @return mixed string or false if impossible to recover.
Chris@0 47 */
Chris@0 48 protected function getAuthor($line)
Chris@0 49 {
Chris@0 50 $blameParts = array();
Chris@0 51 $line = preg_replace('|\s+|', ' ', $line);
Chris@0 52 preg_match(
Chris@0 53 '|\(.+[0-9]{4}-[0-9]{2}-[0-9]{2}\s+[0-9]+\)|',
Chris@0 54 $line,
Chris@0 55 $blameParts
Chris@0 56 );
Chris@0 57
Chris@0 58 if (isset($blameParts[0]) === false) {
Chris@0 59 return false;
Chris@0 60 }
Chris@0 61
Chris@0 62 $parts = explode(' ', $blameParts[0]);
Chris@0 63
Chris@0 64 if (count($parts) < 2) {
Chris@0 65 return false;
Chris@0 66 }
Chris@0 67
Chris@0 68 $parts = array_slice($parts, 0, (count($parts) - 2));
Chris@0 69 $author = preg_replace('|\(|', '', implode($parts, ' '));
Chris@0 70 return $author;
Chris@0 71
Chris@0 72 }//end getAuthor()
Chris@0 73
Chris@0 74
Chris@0 75 /**
Chris@0 76 * Gets the blame output.
Chris@0 77 *
Chris@0 78 * @param string $filename File to blame.
Chris@0 79 *
Chris@0 80 * @return array
Chris@0 81 */
Chris@0 82 protected function getBlameContent($filename)
Chris@0 83 {
Chris@0 84 $cwd = getcwd();
Chris@0 85
Chris@0 86 chdir(dirname($filename));
Chris@0 87 $command = 'git blame --date=short "'.$filename.'" 2>&1';
Chris@0 88 $handle = popen($command, 'r');
Chris@0 89 if ($handle === false) {
Chris@0 90 echo 'ERROR: Could not execute "'.$command.'"'.PHP_EOL.PHP_EOL;
Chris@0 91 exit(2);
Chris@0 92 }
Chris@0 93
Chris@0 94 $rawContent = stream_get_contents($handle);
Chris@0 95 fclose($handle);
Chris@0 96
Chris@0 97 $blames = explode("\n", $rawContent);
Chris@0 98 chdir($cwd);
Chris@0 99
Chris@0 100 return $blames;
Chris@0 101
Chris@0 102 }//end getBlameContent()
Chris@0 103
Chris@0 104
Chris@0 105 }//end class