#!/usr/bin/perl -w

=head1 DESCRIPTION

    Обертка для редактора svn-коммит-сообщений

    Как использовать:
        в ~/.subversion/config в секции [helpers] указать
        editor-cmd = /usr/local/bin/svn-edit-log-message

    Что происходит:
        0. При коммите svn передает этому скрипту файл, в котором надо написать и сохранить коммит-сообщение.
        1. Скрипт дописывает дописывает разное полезное в информационную секцию "под чертой" (сейчас -- svn-каталог, в который делается коммит).
        2. Дописывает в основую секцию содержимое переменной окружения MY_SVN_COMMIT_MESSAGE. 
        3. Открывает файл для редактирования в умолчальном редакторе (переменная EDITOR).
        4. Если MY_SVN_COMMIT_MESSAGE имела вид "^\S+:" (имя бранча с двоеточием) и сообщение не было отредатировано -- коммит отменяется (как если бы было сохранено пустое сообщение)
        
=cut

    # $Id$

use strict;
use File::Slurp;

my $original_text = read_file($ARGV[0]);
my $text_to_edit = $original_text || '';

my @svninfo = `svn info`;
my $info = $svninfo[1];

$text_to_edit =~ s/^(--.*)/$1\n\n$info/m;
$ENV{MY_SVN_COMMIT_MESSAGE} ||= '';
$text_to_edit = $ENV{MY_SVN_COMMIT_MESSAGE}."\n".$text_to_edit;
my $branch_commit = $ENV{MY_SVN_COMMIT_MESSAGE} =~ /^\S+:\s*$/;

write_file($ARGV[0], $text_to_edit);

my $editor = $ENV{EDITOR} || "vim";
system($editor, @ARGV);

my $edited_text = read_file($ARGV[0]);

if ( $edited_text eq $text_to_edit && $branch_commit){
    write_file($ARGV[0], $original_text);
}

