Commit: 2f637ccbfef5fcd60b2e905ea486b60100c020e2
Author: Florian Anderiasch(f...@php.net)         Thu, 8 Mar 2012 07:14:08 +0100
Committer: Florian Anderiasch(f...@php.net)      Thu, 8 Mar 2012 07:14:08 +0100
Parents: 8d595325d65b7de86651483a1705a0ee2a4b4bd5

Link: 
http://git.php.net/?p=karma.git;a=commitdiff;h=2f637ccbfef5fcd60b2e905ea486b60100c020e2

Log:
Add methods to extract commit messages

Changed paths:
  M  lib/Git/ReceiveHook.php


Diff:
2f637ccbfef5fcd60b2e905ea486b60100c020e2
diff --git a/lib/Git/ReceiveHook.php b/lib/Git/ReceiveHook.php
index 6776a2a..8faadcd 100644
--- a/lib/Git/ReceiveHook.php
+++ b/lib/Git/ReceiveHook.php
@@ -134,6 +134,52 @@ class ReceiveHook
         return $output;
     }
 
+    /**
+     * Returns an array of commit messages between revision $old and $new.
+     *
+     * @param string $old The old revison number.
+     * @parma string $new The new revison umber.
+     *
+     * @return array
+     */
+    private function getReceivedMessagesForRange($old, $new)
+    {
+        $repourl = $this->getRepositoryPath();
+        $output = [];
+
+        if ($old == '0000000000000000000000000000000000000000') {
+            $cmd = sprintf(
+                "%s --git-dir=%s for-each-ref --format='%%(refname)' 
'refs/heads/*'",
+                self::GIT_EXECUTABLE,
+                $repourl
+            );
+            exec($cmd, $output);
+
+            /* do we have heads? otherwise it's a new repo! */
+            $heads = implode(' ', $output);
+            $not   = count($output) > 0 ? sprintf('--not %s', 
escapeshellarg($heads)) : '';
+            $cmd   = sprintf(
+                '%s --git-dir=%s log --pretty=format:"[%%ae] %%H %%s" %s %s',
+                self::GIT_EXECUTABLE,
+                $repourl,
+                $not,
+                escapeshellarg($new)
+            );
+            exec($cmd, $output);
+        } else {
+            $cmd = sprintf(
+                '%s --git-dir=%s log --pretty=format:"[%%ae] %%H %%s" %s..%s',
+                self::GIT_EXECUTABLE,
+                $repourl,
+                escapeshellarg($old),
+                escapeshellarg($new)
+            );
+            exec($cmd, $output);
+        }
+
+        return $output;
+    }
+
     public function getReceivedPaths()
     {
         $parsed_input = $this->hookInput();
@@ -150,4 +196,21 @@ class ReceiveHook
 
         return array_unique($paths);
     }
+
+    public function getReceivedMessages()
+    {
+        $parsed_input = $this->hookInput();
+
+        $paths = array_map(
+            function ($input) {
+                return $this->getReceivedMessagesForRange($input['old'], 
$input['new']);
+            },
+            $parsed_input);
+
+        /* remove empty lines, and flattern the array */
+        $flattend = array_reduce($paths, 'array_merge', []);
+        $paths    = array_filter($flattend);
+
+        return array_unique($paths);
+    }
 }



--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to