The branch PHP_POST_RECEIVE on karma.git has been updated via 30a1031bfb19338e8eb5cfabc72c7352d6f38a18 (commit) from a7fabb3c3cf3274a48efe8d7ae948af68984f0d1 (commit)
http://git.php.net/?p=karma.git;a=log;h=30a1031bfb19338e8eb5cfabc72c7352d6f38a18;hp=a7fabb3c3cf3274a48efe8d7ae948af68984f0d1 Summary of changes: lib/Git/PostReceiveHook.php | 121 +++++++++++++++++++++++++----------------- 1 files changed, 72 insertions(+), 49 deletions(-) -- Log ---------------------------------------- commit 30a1031bfb19338e8eb5cfabc72c7352d6f38a18 Author: Alexander Moskaliov <ir...@php.net> Date: Tue Mar 13 20:59:59 2012 +0400 reformat mail for tag diff --git a/lib/Git/PostReceiveHook.php b/lib/Git/PostReceiveHook.php index 821303a..04c37f2 100644 --- a/lib/Git/PostReceiveHook.php +++ b/lib/Git/PostReceiveHook.php @@ -177,17 +177,17 @@ class PostReceiveHook extends ReceiveHook /** * Send mail about tag. - * Subject: [git] [tag] %STATUS% tag %TAGNAME% in %PROJECT% + * Subject: [git] [tag] %PROJECT%: %STATUS% tag %TAGNAME% * Body: * Tag %TAGNAME% in %PROJECT% was %STATUS% (if sha was changed)from %OLD_SHA% * Tag(if annotaded): %SHA% * Tagger(if annotaded): %USER% Thu, 08 Mar 2012 12:39:48 +0000 * - * Link: http://git.php.net/?p=%PROJECT_PATH%;a=tag;h=%SHA% - * * Log(if annotaded): * %MESSAGE% * + * Link: http://git.php.net/?p=%PROJECT_PATH%;a=tag;h=%SHA% + * * Target: %SHA% * Author: %USER% Thu, 08 Mar 2012 12:39:48 +0000 * Committer: %USER% Thu, 08 Mar 2012 12:39:48 +0000 @@ -208,71 +208,94 @@ class PostReceiveHook extends ReceiveHook */ private function sendTagMail($name, $changetype, $oldrev, $newrev) { - // FIXME: work in progress - if ($changetype == self::TYPE_UPDATED) { - $title = "Tag " . $name . " was updated"; - } elseif ($changetype == self::TYPE_CREATED) { - $title = "Tag " . $name . " was created"; - } else { - $title = "Tag " . $name . " was deleted"; - } - $message = $title . "\n\n"; + $status = [self::TYPE_UPDATED => 'Update', self::TYPE_CREATED => 'Create', => self::TYPE_DELETED => 'Delete']; + $shortname = str_replace('refs/tags/', '', $name); + $mail = new \Mail(); + $mail->setSubject($this->emailPrefix . '[tag] ' . $this->getRepositoryName() . ': ' . $status[$changetype] . ' tag ' . $shortname; + + $message = 'Tag ' . $shortname . ' in ' . $this->getRepositoryName() . ' was ' . $status[$changetype] . 'd' . + (($changetype == self::TYPE_DELETED) ? ' from ' . $oldrev : '' ) . "\n"; if ($changetype != self::TYPE_DELETED) { - $message .= "Tag info:\n"; - $isAnnotatedNewTag = $this->isAnnotatedTag($name); - if ($isAnnotatedNewTag) { - $message .= $this->getAnnotatedTagInfo($name) ."\n"; + $info = $this->getTagInfo($name); + $targetInfo = $this->getCommitInfo($info['target']); + $targetPaths = $this->getChangedPaths(escapeshellarg($info['target'])); + $pathsString = ''; + foreach ($targetPaths as $path => $action) + { + $pathsString .= ' ' . $action . ' ' . $path . "\n"; + } + + if ($info['annotated']) { + $message .= 'Tag: ' . $info['revision'] . "\n"; + $message .= 'Tagger: ' . $info['tagger'] . '(' . $info['tagger_email'] . ') ' . $info['tagger_date'] . "\n"; + } + + $message .= "\n"; + $message .= "Link: http://git.php.net/?p=" . $this->getRepositoryName() . ".git;;a=tag;h=" . $info['revision'] . "\n"; + $message .= "\n"; + + $message .= 'Target: ' . $info['target'] . "\n"; + $message .= 'Author: ' . $targetInfo['author'] . '(' . $targetInfo['author_email'] . ') ' . $targetInfo['author_date'] . "\n"; + $message .= 'Committer: ' . $targetInfo['committer'] . '(' . $targetInfo['committer_email'] . ') ' . $targetInfo['committer_date'] . "\n"; + if ($targetInfo['parents']) $message .= 'Parents: ' . $targetInfo['parents'] . "\n"; + $message .= "Target link: http://git.php.net/?p=" . $this->getRepositoryName() . ".git;a=commitdiff;h=" . $info['target'] . "\n"; + $message .= "Target log:\n" . $targetInfo['log'] . "\n"; + + + if (strlen($pathsString) < 8192) { + // inline changed paths + $message .= "Changed paths:\n" . $pathsString . "\n"; } else { - $message .= $this->getTagInfo($newrev) ."\n"; + // changed paths attach + $pathsFile = 'paths_' . $info['target'] . '.txt'; + $mail->addTextFile($pathsFile, $pathsString); + if ((strlen($message) + $mail->getFileLength($pathsFile)) > 262144) { + // changed paths attach exceeded max size + $mail->dropFile($pathsFile); + $message .= 'Changed paths: <changed paths exceeded maximum size>'; + } } } - if ($changetype != self::TYPE_CREATED) { - $message .= "Old tag sha: \n" . $oldrev; - } - $this->mail($this->emailPrefix . '[push] ' . $title , $message); - } + $mail->setMessage($message); - /** - * @param $tag string - * @return string - */ - private function getTagInfo($tag) - { - $info = "Target:\n"; - $info .= \Git::gitExec('diff-tree --stat --pretty=medium -c %s', escapeshellarg($tag)); - return $info; + $mail->setFrom($this->pushAuthor . '@php.net', $this->pushAuthor); + $mail->addTo($this->mailingList); + + $mail->send(); } /** * @param $tag string * @return string */ - private function getAnnotatedTagInfo($tag) + private function getTagInfo($tag) { - $tagInfo = \Git::gitExec('for-each-ref --format="%%(*objectname) %%(taggername) %%(taggerdate)" %s', escapeshellarg($tag)); - list($target, $tagger, $taggerDate) = explode(' ', $tagInfo); - - $info = "Tagger: " . $tagger . "\n"; - $info .= "Date: " . $taggerDate . "\n"; - $info .= \Git::gitExec("cat-file tag %s | sed -e '1,/^$/d'", escapeshellarg($tag))."\n"; - $info .= "Target:\n"; - $info .= \Git::gitExec('diff-tree --stat --pretty=medium -c %s', escapeshellarg($target)); + $temp = \Git::gitExec("for-each-ref --format=\"%%(objecttype)\n%%(*objectname)\n%%(taggername)\n%%(taggeremail)\n%%(taggerdate)\n%%(*objectname)\n%%(contents)\" %s", escapeshellarg($tag)); + $temp = explode("\n", $temp, 6); + if ($temp[0] == 'tag') { + $info = [ + 'annotated' => true, + 'revision' => $temp[1], + 'tagger' => $temp[2], + 'tagger_email' => $temp[3], + 'tagger_date' => $temp[4], + 'target' => $temp[5], + 'log' => $temp[6] + ]; + } else { + $info = [ + 'annotated' => false, + 'revision' => $temp[1], + 'target' => $temp[1] + ]; + } return $info; } /** - * @param $rev string - * @return bool - */ - private function isAnnotatedTag($rev) - { - return trim(\Git::gitExec('for-each-ref --format="%%(objecttype)" %s', escapeshellarg($rev))) == 'tag'; - } - - /** * Get list of revisions for $revRange * * Required already escaped string in $revRange!!! Thank you for your contribution. -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php