This might seem like a strange title, but let's look at it for a moment. If subversion commit messages carry magic marker (RT #1234 in my case) I want to create RT comment (micro-blog post) with link back to SVN::Web repository (and thus commit which created comment in first place). Nice and circular :-)
First, install subversion post-commit hook in /srv/svn/repository/hooks/post-commit:
#!/bin/sh REPOS="$1" REV="$2" /srv/svn/svn-rt-comment.pl $REPOS $REV
After that, create following script:
#!/usr/bin/perl use strict; use warnings; use RT::Client::REST; use RT::Client::REST::Ticket; # Request Tracker my ( $server, $username, $password ) = ( 'https://bugs.example.com/rt', 'rtuser', 'rtpasswd' ); # patternt to recognize RT references in commits log or diff my $rt_re = qr/rt\s*#\s*(\d+)/i; my $svnweb = 'https://svn.example.com/svnweb/index.cgi/repository/revision/?rev='; die "usage: $0 repo rev\n" unless @ARGV; my ( $repo, $rev ) = @ARGV; sub svnlook { my $command = shift; `svnlook $command --revision $rev $repo` } my $log = svnlook 'log'; my $diff = svnlook 'diff'; if ( $log =~ $rt_re || $diff =~ $rt_re ) { my $id = $1 or die "no id"; my $rt = RT::Client::REST->new( server => $server ); $rt->login( username=> $username, password=> $password ); my $ticket = RT::Client::REST::Ticket->new( rt => $rt, id => $id ); my $message = svnlook 'author' . "\t" . svnlook 'date' . "\n" . $svnweb . $rev . "\n\n" . svnlook 'changed --copy-info' . "\n" . $log ; $ticket->comment( message => $message ); }
And apply following patch to your Request Tracker 3.6 to create links in messages:
--- /usr/share/request-tracker3.6/html/Ticket/Elements/ShowMessageStanza 2006-06-20 00:44:04.000000000 +0200 +++ /usr/local/share/request-tracker3.6/html/Ticket/Elements/ShowMessageStanza 2008-09-26 13:23:12.000000000 +0200 @@ -57,8 +57,12 @@ my $content = $stanza->{raw}; RT::Interface::Web::EscapeUTF8(\$content); $m->comp('/Elements/Callback', content => \$content, %ARGS); - $content =~ s{$}{
}mg - if defined $content; + if ( defined($content) ) { + # convert urls to links + $content =~ s{(https?://\S+)}{<a href="$1">$1</a>}; + $content =~ s{$}{<br />}mg; + warn "## $content\n"; + } %perl> <%$content |n%>
And you have your micro-blogging environment connected by linking :-)
Update: If you have problems using SVN::Web with Subversion 1.5 take a look at this ticket which includes svn-web-svn1.5.diff which fixes it.