From 240b7458dd312c26ed335d9af14b8ed7a809f5ae Mon Sep 17 00:00:00 2001 From: "Jonathan A. Schweder" Date: Tue, 13 Sep 2016 12:27:52 -0300 Subject: [PATCH 1/2] add MercurialProcessor --- .gitignore | 1 + src/Monolog/Processor/MercurialProcessor.php | 59 +++++++++++++++++++ .../Processor/MercurialProcessorTest.php | 31 ++++++++++ 3 files changed, 91 insertions(+) create mode 100644 src/Monolog/Processor/MercurialProcessor.php create mode 100644 tests/Monolog/Processor/MercurialProcessorTest.php diff --git a/.gitignore b/.gitignore index 22486e9c..0640915d 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ phpunit.xml composer.lock .DS_Store .php_cs.cache +.hg diff --git a/src/Monolog/Processor/MercurialProcessor.php b/src/Monolog/Processor/MercurialProcessor.php new file mode 100644 index 00000000..1be3f292 --- /dev/null +++ b/src/Monolog/Processor/MercurialProcessor.php @@ -0,0 +1,59 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\Logger; + +/** + * Injects Hg branch and Hg revision number in all records + * + * @author Jonathan A. Schweder + */ +class MercurialProcessor +{ + private $level; + private static $cache; + + public function __construct($level = Logger::DEBUG) + { + $this->level = Logger::toMonologLevel($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; + } + + $record['extra']['hg'] = self::getMercurialInfo(); + + return $record; + } + + private static function getMercurialInfo() + { + if (self::$cache) { + return self::$cache; + } + + $result = explode(' ', trim(`hg id -nb`)); + return self::$cache = array( + 'branch' => $result[1], + 'revision' => $result[2], + ); + } +} diff --git a/tests/Monolog/Processor/MercurialProcessorTest.php b/tests/Monolog/Processor/MercurialProcessorTest.php new file mode 100644 index 00000000..348a7948 --- /dev/null +++ b/tests/Monolog/Processor/MercurialProcessorTest.php @@ -0,0 +1,31 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\TestCase; + +class MercurialProcessorTest extends TestCase +{ + /** + * @covers Monolog\Processor\MercurialProcessor::__invoke + */ + public function testProcessor() + { + `hg init`; + $processor = new MercurialProcessor(); + $record = $processor($this->getRecord()); + + $this->assertArrayHasKey('hg', $record['extra']); + $this->assertTrue(!is_array($record['extra']['hg']['branch'])); + $this->assertTrue(!is_array($record['extra']['hg']['revision'])); + } +} From ffc421a4fd4e9651e236341f5ff3994b25a8ecc5 Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Sun, 25 Sep 2016 16:47:31 +0200 Subject: [PATCH 2/2] Make hg test optional --- tests/Monolog/Processor/MercurialProcessorTest.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/Monolog/Processor/MercurialProcessorTest.php b/tests/Monolog/Processor/MercurialProcessorTest.php index 348a7948..11f2b35a 100644 --- a/tests/Monolog/Processor/MercurialProcessorTest.php +++ b/tests/Monolog/Processor/MercurialProcessorTest.php @@ -20,6 +20,16 @@ class MercurialProcessorTest extends TestCase */ public function testProcessor() { + if (defined('PHP_WINDOWS_VERSION_BUILD')) { + exec("where hg 2>NUL", $output, $result); + } else { + exec("which hg 2>/dev/null >/dev/null", $output, $result); + } + if ($result != 0) { + $this->markTestSkipped('hg is missing'); + return; + } + `hg init`; $processor = new MercurialProcessor(); $record = $processor($this->getRecord());