view hooks/post-commit.pl @ 678:ffb64e82277c

Added a post-commit hook for Assembla. Using the Ruby variant. git-svn-id: svn://svn.code.sf.net/p/universalindent/code/trunk@946 59b1889a-e5ac-428c-b0c7-476e01d41282
author thomas_-_s <thomas_-_s@59b1889a-e5ac-428c-b0c7-476e01d41282>
date Tue, 21 Apr 2009 22:25:09 +0000
parents
children
line wrap: on
line source

#!/usr/bin/env perl

# Run this script with:
# post-commit.rb /path/to/svn/repo revision_number

###################################################
# Find these below values on external svn tool tab
$TOOL_ID = ""; # 22 chars uuid
$SECRET_KEY = "xxxxxxxx";

# On *BSD systems, svnlook command can be in /usr/local/bin/svnlook
$SVN_LOOK_CMD = "/usr/bin/svnlook";

###################################################
# map svn usernames with assembla accounts, if usernames differ from Assembla usernames
# Our API will search users by login, then by email
# if user will not be found, Anonymous user will be used in alerts for svn commit
%USER_MAP = {
        'local_user_1' => 'assembla_login_1',
        'local_user_2' => 'assembla_login_2'
        };

###################################################
# DO NOT CHANGE ANYTHING BELOW !!!
###################################################

$API_URL = "http://www.assembla.com/changesets/";

# Install below package on debian/ubuntu
# apt-get install libwww-perl

use HTTP::Request::Common;
use LWP::UserAgent;

$repo = $ARGV[1];
$rev = $ARGV[2];

$author = `$SVN_LOOK_CMD author -r "$rev" "$repo"`;
$log = `$SVN_LOOK_CMD log -r "$rev" "$repo"`;

chomp $author;
chomp $log;

$ua = LWP::UserAgent->new;
$ua->agent("AssemblaApiPerlClient/0.1");

# Create a request
$req = POST $API_URL, 
	["tool_id" => 0, "spaces_tool_id" => $TOOL_ID, "secret_key" => $SECRET_KEY,
        	"username" => ($USER_MAP[$author] || $author), "comment" => $log, "external_id" => $rev]
);
$req->content_type('application/x-www-form-urlencoded');

# Pass request to the user agent and get a response back
$res = $ua->request($req);

# Check the outcome of the response
if (!$res->is_success) {
    print $res->status_line, "\n";
}