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
|