Commit: efd58e9da03931adc336fbf3400a94d4103f5fbf Author: Florian Anderiasch(f...@php.net) Mon, 19 Mar 2012 16:03:36 +0100 Committer: Florian Anderiasch(f...@php.net) Mon, 19 Mar 2012 16:03:36 +0100 Parents: db438a4a9ec117fec2767de6a0f79147d48285cc
Link: http://git.php.net/?p=karma.git;a=commitdiff;h=efd58e9da03931adc336fbf3400a94d4103f5fbf Log: Update to changed ReceiveHook Changed paths: M hooks/post-receive.bugsweb A lib/Git/BugsWebPostReceiveHook.php Diff: efd58e9da03931adc336fbf3400a94d4103f5fbf diff --git a/hooks/post-receive.bugsweb b/hooks/post-receive.bugsweb index 9ab2bc3..1c53f0d 100755 --- a/hooks/post-receive.bugsweb +++ b/hooks/post-receive.bugsweb @@ -16,6 +16,7 @@ include 'Git.php'; include 'Git/PushInformation.php'; include 'Git/ReceiveHook.php'; include 'Git/PostReceiveHook.php'; +include 'Git/BugsWebPostReceiveHook.php'; $recipients = exec('git config hooks.mailinglist'); $emailPrefix = exec('git config hooks.emailprefix') ?: '[git]'; @@ -28,7 +29,7 @@ if (getenv('REMOTE_USER')) { $user = getenv('GL_USER'); } -$hook = new \Git\PostReceiveHook(KARMA_FILE, REPOSITORY_PATH); +$hook = new \Git\BugsWebPostReceiveHook(KARMA_FILE, REPOSITORY_PATH); $rpath = $hook->getReceivedMessages( getenv('GL_REPO_BASE_ABS') ?: REPOSITORY_PATH, $user, diff --git a/lib/Git/BugsWebPostReceiveHook.php b/lib/Git/BugsWebPostReceiveHook.php new file mode 100644 index 0000000..13e263b --- /dev/null +++ b/lib/Git/BugsWebPostReceiveHook.php @@ -0,0 +1,69 @@ +<?php +namespace Git; + +class BugsWebPostReceiveHook extends ReceiveHook +{ + + public function getReceivedMessages() + { + $this->hookInput(); + + $paths = array_map( + function ($input) { + return $this->getReceivedMessagesForRange($input['old'], $input['new']); + }, + $this->refs); + + /* remove empty lines, and flattern the array */ + $flattend = array_reduce($paths, 'array_merge', []); + $paths = array_filter($flattend); + + return array_unique($paths); + } + + /** + * 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 = \Git::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', + \Git::GIT_EXECUTABLE, + $repourl, + $not, + escapeshellarg($new) + ); + exec($cmd, $output); + } else { + $cmd = sprintf( + '%s --git-dir=%s log --pretty=format:"[%%ae] %%H %%s" %s..%s', + \Git::GIT_EXECUTABLE, + $repourl, + escapeshellarg($old), + escapeshellarg($new) + ); + exec($cmd, $output); + } + + return $output; + } +} \ No newline at end of file -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php