Ver Fonte

Merge branch '1.x'

Jordi Boggiano há 9 anos atrás
pai
commit
d8dee1cc15

+ 1 - 0
.gitignore

@@ -4,3 +4,4 @@ phpunit.xml
 composer.lock
 .DS_Store
 .php_cs.cache
+.hg

+ 59 - 0
src/Monolog/Processor/MercurialProcessor.php

@@ -0,0 +1,59 @@
+<?php
+
+/*
+ * This file is part of the Monolog package.
+ *
+ * (c) Jonathan A. Schweder <jonathanschweder@gmail.com>
+ *
+ * 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 <jonathanschweder@gmail.com>
+ */
+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],
+        );
+    }
+}

+ 41 - 0
tests/Monolog/Processor/MercurialProcessorTest.php

@@ -0,0 +1,41 @@
+<?php
+
+/*
+ * This file is part of the Monolog package.
+ *
+ * (c) Jonathan A. Schweder <jonathanschweder@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Monolog\Processor;
+
+use Monolog\Test\TestCase;
+
+class MercurialProcessorTest extends TestCase
+{
+    /**
+     * @covers Monolog\Processor\MercurialProcessor::__invoke
+     */
+    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());
+
+        $this->assertArrayHasKey('hg', $record['extra']);
+        $this->assertTrue(!is_array($record['extra']['hg']['branch']));
+        $this->assertTrue(!is_array($record['extra']['hg']['revision']));
+    }
+}