The branch PHP_POST_RECEIVE on karma.git has been updated
via e41adefbee4ab8758d42a360eeaecd5e22bb7e30 (commit)
from 46adcc9c1571d5a20660ca49b2762189a1495786 (commit)
http://git.php.net/?p=karma.git;a=log;h=e41adefbee4ab8758d42a360eeaecd5e22bb7e30;hp=46adcc9c1571d5a20660ca49b2762189a1495786
Summary of changes:
README.POST_RECEIVE | 12 +++++++++++-
hooks/post-receive | 1 -
lib/Git/PostReceiveHook.php | 38 +++++++++++++++++++++++++++-----------
lib/Git/ReceiveHook.php | 2 +-
4 files changed, 39 insertions(+), 14 deletions(-)
-- Log ----------------------------------------
commit e41adefbee4ab8758d42a360eeaecd5e22bb7e30
Author: Alexander Moskaliov <[email protected]>
Date: Thu Mar 8 13:40:36 2012 +0400
add few situations
diff --git a/README.POST_RECEIVE b/README.POST_RECEIVE
index 522ff1f..e26720f 100644
--- a/README.POST_RECEIVE
+++ b/README.POST_RECEIVE
@@ -16,7 +16,7 @@ This part contains info only about mail per branch. For mail
per commit logic di
\
3 - B (pushed)
- We get all commits reachable from new branche and not from all other
branches:
+ We get all commits reachable from new branch and not from all other NOT
NEW branches:
git rev-list B --not A -> 3-B
@@ -42,6 +42,16 @@ This part contains info only about mail per branch. For mail
per commit logic di
Now we send mail with 5-B commits only.
+ 1 - 2 - 3 - A (already on server or pushed)
+ \
+ 4 - 5 - B (pushed)
+ \
+ 6 - C (pushed)
+
+ If we use git rev-list B --not A C we skip 4-5 revisions in B.
+ So we use git rev-list B --not A. See first situation in "New branch"
section.
+
+
Deleted branch (O..0):
diff --git a/hooks/post-receive b/hooks/post-receive
index 5576fe4..56b583b 100755
--- a/hooks/post-receive
+++ b/hooks/post-receive
@@ -4,7 +4,6 @@ namespace Karma;
// STATUS: not worked
// TODO: add license
-// TODO: mails per commit
// TODO: refactor with lib/Git
// TODO: documentation
// TODO: refactor for PHP 5.4
diff --git a/lib/Git/PostReceiveHook.php b/lib/Git/PostReceiveHook.php
index c515358..a5da8ef 100644
--- a/lib/Git/PostReceiveHook.php
+++ b/lib/Git/PostReceiveHook.php
@@ -6,22 +6,24 @@ class PostReceiveHook extends ReceiveHook
private $pushAuthor = '';
private $mailingList = '';
- private $emailprefix = '';
+ private $emailPrefix = '';
private $refs = array();
+ private $newBranches = array();
+ private $updatedBranches = array();
private $revisions = array();
private $allBranches = array();
- public function __construct($basePath, $pushAuthor, $mailingList,
$emailprefix)
+ public function __construct($basePath, $pushAuthor, $mailingList,
$emailPrefix)
{
parent::__construct($basePath);
$this->pushAuthor = $pushAuthor;
$this->mailingList = $mailingList;
- $this->emailprefix = $emailprefix;
+ $this->emailPrefix = $emailPrefix;
$this->allBranches = $this->getAllBranches();
}
@@ -45,6 +47,17 @@ class PostReceiveHook extends ReceiveHook
{
$this->refs = $this->hookInput();
+ //cache list of new and updated branches
+ foreach ($this->refs as $ref) {
+ if ($ref['reftype'] == self::REF_BRANCH){
+ if ($ref['changetype'] == self::TYPE_UPDATED) {
+ $this->updatedBranches[] = $ref['refname'];
+ } elseif ($ref['changetype'] == self::TYPE_CREATED) {
+ $this->newBranches[] = $ref['refname'];
+ }
+ }
+ }
+
//send mails per ref push
foreach ($this->refs as $ref) {
if ($ref['reftype'] == self::REF_TAG) {
@@ -54,9 +67,6 @@ class PostReceiveHook extends ReceiveHook
}
}
- // TODO: For new branches we must check if this branch was
- // cloned from other branch in this push - it's especial case
-
foreach ($this->revisions as $revision => $branches) {
// check if it commit was already in other branches
if (!$this->isRevExistsInBranches($revision,
array_diff($this->allBranches, $branches))) {
@@ -92,7 +102,13 @@ class PostReceiveHook extends ReceiveHook
} else {
// for new branch we write log about new commits only
- $revisions = $this->getRevisions($branch['new']. ' --not ' .
implode(' ', $this->allBranches));
+ $revisions = $this->getRevisions($branch['new']. ' --not ' .
implode(' ', array_diff($this->allBranches, $this->newBranches)));
+
+ foreach ($this->updatedBranches as $refname) {
+ if
($this->isRevExistsInBranches($this->refs[$refname]['old'],
array($branch['refname']))) {
+ $this->cacheRevisions($branch['refname'],
$this->getRevisions($this->refs[$refname]['old'] . '..' . $branch['new']));
+ }
+ }
}
$this->cacheRevisions($branch['refname'], $revisions);
@@ -110,7 +126,7 @@ class PostReceiveHook extends ReceiveHook
}
}
- $this->mail($this->emailprefix . '[push] ' . $title , $message);
+ $this->mail($this->emailPrefix . '[push] ' . $title , $message);
}
@@ -119,7 +135,7 @@ class PostReceiveHook extends ReceiveHook
//TODO: add mail order from older commit to newer
foreach ($revisions as $revision)
{
- $this->revisions[$revision][] = $branchName;
+ $this->revisions[$revision][$branchName] = $branchName;
}
}
@@ -150,7 +166,7 @@ class PostReceiveHook extends ReceiveHook
$message .= "Old tag sha: \n" . $tag['old'];
}
- $this->mail($this->emailprefix . '[push] ' . $title , $message);
+ $this->mail($this->emailPrefix . '[push] ' . $title , $message);
}
private function getTagInfo($tag)
@@ -206,7 +222,7 @@ class PostReceiveHook extends ReceiveHook
$message .= $diff ."\n\n";
- $this->mail($this->emailprefix . '[commit] ' . $title , $message);
+ $this->mail($this->emailPrefix . '[commit] ' . $title , $message);
}
diff --git a/lib/Git/ReceiveHook.php b/lib/Git/ReceiveHook.php
index f332f71..f957fc7 100644
--- a/lib/Git/ReceiveHook.php
+++ b/lib/Git/ReceiveHook.php
@@ -85,7 +85,7 @@ abstract class ReceiveHook
}
- $parsed_input[] = $ref;
+ $parsed_input[$ref['refname']] = $ref;
}
}
return $parsed_input;
Thank you for your contribution.
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php