diff --git a/src/Monolog/Processor/GitProcessor.php b/src/Monolog/Processor/GitProcessor.php index 0bb45fca..96c2abfe 100644 --- a/src/Monolog/Processor/GitProcessor.php +++ b/src/Monolog/Processor/GitProcessor.php @@ -11,42 +11,54 @@ namespace Monolog\Processor; +use Monolog\Logger; + /** * Injects Git branch and Git commit SHA in all records * * @author Nick Otter + * @author Jordi Boggiano */ class GitProcessor { + private $level; + private static $cache; + + public function __construct($level = Logger::DEBUG) + { + $this->level = $level; + } + /** * @param array $record * @return array */ public function __invoke(array $record) { + // return if the level is not high enough + if ($record['level'] < $this->level) { + return $record; + } - $branch = self::getBranch(); - $commit = self::getCommit(); - - $record['extra']['git']['branch'] = $branch; - $record['extra']['git']['commit'] = $commit; + $record['extra']['git'] = self::getGitInfo(); return $record; } - static protected function getBranch() { - $branches = explode("\n", `git branch`); - - foreach ($branches as $branch) { - if ($branch[0] == "*") { - return substr($branch, 2); - } + private static function getGitInfo() + { + if (self::$cache) { + return self::$cache; } - return $branches; - } - static protected function getCommit() { - $s = `git rev-parse HEAD`; - return trim($s); + $branches = `git branch -v --no-abbrev`; + if (preg_match('{^\* (.+?)\s+([a-f0-9]{40})(?:\s|$)}m', $branches, $matches)) { + return self::$cache = array( + 'branch' => $matches[1], + 'commit' => $matches[2], + ); + } + + return self::$cache = array(); } } diff --git a/tests/Monolog/Processor/GitProcessorTest.php b/tests/Monolog/Processor/GitProcessorTest.php index 5f7a3e24..5adb505d 100644 --- a/tests/Monolog/Processor/GitProcessorTest.php +++ b/tests/Monolog/Processor/GitProcessorTest.php @@ -24,8 +24,6 @@ class GitProcessorTest extends TestCase $record = $processor($this->getRecord()); $this->assertArrayHasKey('git', $record['extra']); - $this->assertTrue(!is_array($record['extra']['git']['branch'])); - } }