NAME
Git::Hook::PostReceive - Parses git commit information in post-receive hook scripts
VERSION
version 0.3
SYNOPSIS
# hooks/post-receive
use Git::Hook::PostReceive;
my @branches = Git::Hook::PostReceive->new->read_stdin;
foreach my $payload (@branches) {
$payload->{before};
$payload->{after};
for my $commit (@{ $payload->{commits} } ) {
$commit->{id};
$commit->{author}->{name};
$commit->{author}->{email};
$commit->{message};
$commit->{date};
}
}
# hooks/post-receive to send web hooks like GitHub
use Git::Hook::PostReceive 0.2;
use LWP::UserAgent;
use JSON;
my $ua = LWP::UserAgent->new;
for (Git::Hook::PostReceive->new( utf8 => 1 )->read_stdin) {
$ua->post( "http://example.org/webhook", { 'payload' => to_json($_) } );
}
DESCRIPTION
Git::Hook::PostReceive parses git commit information in post-receive hook script.
All you need to do is pass each STDIN string to Git::Hook::PostReceive, then it returns the commit payload for the particular branch.
This module does not use any non-core dependencies, so you can also copy it to a location of your choice and directly include it.
To run the hook on an arbitrary git repository, set the GIT_WORK_TREE
environment variable.
payload format
The payload format returned by method read_stdin
or run
is compatible with https://help.github.com/articles/post-receive-hooks with some minor differences:
{
before => $commit_hash_before,
after => $commit_hash_after,
ref => $ref,
created => $whether_new_branch, # 1|0 in contrast to true|false
deleted => $whether_branch_removed, # 1|0 in contrast to true|false
commits => [
id => $hash,
message => $message,
timestamp => $date,
author => {
email => $email,
name => $name
},
commiter => {
email => $email,
name => $name
},
added => [@added_paths],
removed => [@deleted_paths],
modified => [@modified_paths],
],
repository => $directory, # in contrast to detailed object
}
before
is set to <0000000000000000000000000000000000000000> and created
is set to 1
(0
otherwise) when a new branch has been pushed. after
is set to <0000000000000000000000000000000000000000> and deleted
is set to 1
(0
otherwise) when a branch has been deleted.
CONFIGURATION
- utf8
-
Git does not know about character encodings, so the payload will consists of raw byte strings by default. Setting this configuration value to a true value will decode all payload fields as UTF8 to get Unicode strings.
METHODS
read_stdin( [ @lines ] )
Read one or more lines as passed to a git post-receive hook. One can pass arrays of lines or strings that are split by newlines. Lines are read from STDIN by default.
run( $before, $after, $ref )
Return a payload for the commits between $before
and $after
at branch $ref
. Returns undef on failure.
detect_action($before, $after)
This function detects the action of the receiving commits and return the action name with the related commit hash in a hashref.
0000000000
at the head means "branch created".
0000000000
at the end means "branch deleted".
Otherwise it means "commits pushed".
SEE ALSO
Git::Repository, Plack::App::GitHub::WebHook
CONTRIBUTORS
Jakob Voss <voss@gbv.de>
Yo-An Lin <cornelius@cpan.org>
AUTHOR
Yo-An Lin
COPYRIGHT AND LICENSE
This software is copyright (c) 2014 by Yo-An Lin.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 236:
alternative text 'https://help.github.com/articles/post-receive-hooks' contains non-escaped | or /