Chris@0
|
1 <?php
|
Chris@0
|
2 /**
|
Chris@0
|
3 * Mercurial 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 * Mercurial 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: @package_version@
|
Chris@0
|
28 * @link http://pear.php.net/package/PHP_CodeSniffer
|
Chris@0
|
29 */
|
Chris@0
|
30 class PHP_CodeSniffer_Reports_Hgblame 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 = 'MERCURIAL';
|
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
|
Chris@0
|
53 preg_match(
|
Chris@0
|
54 '|(.+[0-9]{2}:[0-9]{2}:[0-9]{2}\s[0-9]{4}\s.[0-9]{4}:)|',
|
Chris@0
|
55 $line,
|
Chris@0
|
56 $blameParts
|
Chris@0
|
57 );
|
Chris@0
|
58
|
Chris@0
|
59 if (isset($blameParts[0]) === false) {
|
Chris@0
|
60 return false;
|
Chris@0
|
61 }
|
Chris@0
|
62
|
Chris@0
|
63 $parts = explode(' ', $blameParts[0]);
|
Chris@0
|
64
|
Chris@0
|
65 if (count($parts) < 6) {
|
Chris@0
|
66 return false;
|
Chris@0
|
67 }
|
Chris@0
|
68
|
Chris@0
|
69 $parts = array_slice($parts, 0, (count($parts) - 6));
|
Chris@0
|
70
|
Chris@0
|
71 return trim(preg_replace('|<.+>|', '', implode($parts, ' ')));
|
Chris@0
|
72
|
Chris@0
|
73 }//end getAuthor()
|
Chris@0
|
74
|
Chris@0
|
75
|
Chris@0
|
76 /**
|
Chris@0
|
77 * Gets the blame output.
|
Chris@0
|
78 *
|
Chris@0
|
79 * @param string $filename File to blame.
|
Chris@0
|
80 *
|
Chris@0
|
81 * @return array
|
Chris@0
|
82 */
|
Chris@0
|
83 protected function getBlameContent($filename)
|
Chris@0
|
84 {
|
Chris@0
|
85 $cwd = getcwd();
|
Chris@0
|
86
|
Chris@0
|
87 $fileParts = explode(DIRECTORY_SEPARATOR, $filename);
|
Chris@0
|
88 $found = false;
|
Chris@0
|
89 $location = '';
|
Chris@0
|
90 while (empty($fileParts) === false) {
|
Chris@0
|
91 array_pop($fileParts);
|
Chris@0
|
92 $location = implode($fileParts, DIRECTORY_SEPARATOR);
|
Chris@0
|
93 if (is_dir($location.DIRECTORY_SEPARATOR.'.hg') === true) {
|
Chris@0
|
94 $found = true;
|
Chris@0
|
95 break;
|
Chris@0
|
96 }
|
Chris@0
|
97 }
|
Chris@0
|
98
|
Chris@0
|
99 if ($found === true) {
|
Chris@0
|
100 chdir($location);
|
Chris@0
|
101 } else {
|
Chris@0
|
102 echo 'ERROR: Could not locate .hg directory '.PHP_EOL.PHP_EOL;
|
Chris@0
|
103 exit(2);
|
Chris@0
|
104 }
|
Chris@0
|
105
|
Chris@0
|
106 $command = 'hg blame -u -d -v "'.$filename.'" 2>&1';
|
Chris@0
|
107 $handle = popen($command, 'r');
|
Chris@0
|
108 if ($handle === false) {
|
Chris@0
|
109 echo 'ERROR: Could not execute "'.$command.'"'.PHP_EOL.PHP_EOL;
|
Chris@0
|
110 exit(2);
|
Chris@0
|
111 }
|
Chris@0
|
112
|
Chris@0
|
113 $rawContent = stream_get_contents($handle);
|
Chris@0
|
114 fclose($handle);
|
Chris@0
|
115
|
Chris@0
|
116 $blames = explode("\n", $rawContent);
|
Chris@0
|
117 chdir($cwd);
|
Chris@0
|
118
|
Chris@0
|
119 return $blames;
|
Chris@0
|
120
|
Chris@0
|
121 }//end getBlameContent()
|
Chris@0
|
122
|
Chris@0
|
123
|
Chris@0
|
124 }//end class
|