SVNのコミット情報をログに書くスクリプト
svnのコミットログを動的に取る方法ってないんかなぁ。とりあえず、以下の適当コードで対応。
#!/usr/bin/perl use strict; use warnings; use SVN::Client; use IO::All; use Getopt::Long; my $logfile = "/var/log/svnlog"; my $target = "http://localhost/svn/repo"; my $name = "repo"; my $sleep = 60; my $result = GetOptions( "logfile=s" => \$logfile, "target=s" => \$target, "reponame=s"=> \$name, "sleep=i" => \$sleep, ); my $client = SVN::Client->new(); my $log = ''; my $prev_revision = 0; my $cur_revision = 0; # $ctx->log($targets, $start, $end, $discover_changed_paths, $strict_node_history, \&log_receiver, $pool); while ( 1 ) { eval { $client->log( $target, $prev_revision || 'HEAD', 'HEAD', 1, 1, sub { my ($changed_paths, $revision, $author, $date, $message, $pool) = @_; unless ( $message ) { $message ="メッセージなし"; } $log = "svn:[$name] r:$revision:$author: $message \n"; my $files = [ sort keys %$changed_paths ]; $log .= " change:" . join( ',' , @{ $files } ) . "\n"; $cur_revision = $revision; if( $cur_revision > $prev_revision ) { $prev_revision = $cur_revision; my $io = io( $logfile ); $io->append( $log ) ; $io->close(); $log = ''; } } ); }; if( $@ ) { warn $@; } sleep $sleep; } =head1 NAME svnlogger.pl - logging svn commit infomation. =head1 SYNOPSYS svnlogger.pl --logfile /var/log/svnlog --target http://localhost/svn/repo --reponame 'Foo Project' --sleep 30 & =head2 DESCRIPTION svnのコミット情報をロギングします。 エラーおこってもループ回り続けます。気をつけて。 =head1 AUTHOR Tomohiro teranishi <tomohiro.teranishi@gmail.com> =cut