Копировать коммит комментарии в буфер обмена Windows

Недавно я увидел изящный хак для ClearCase, где номер версии был добавлен в буфер обмена Windows как часть коммита. Взлом выглядит так:

@rem = ' PERL for Windows NT - ccperl must be in search path
@echo off
ccperl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
goto endofperl
@rem ';

#$CLEARCASE_COMMENT = $ENV{CLEARCASE_COMMENT};
#$CLEARCASE_FILE1   = $ENV{CLEARCASE_PN};
#$CLEARCASE_FILE2   = $ENV{CLEARCASE_XPN};

#print "DEBUG: $CLEARCASE_FILE2\n";

#$message = "Element: $CLEARCASE_FILE2";

use Win32::Clipboard;
Win32::Clipboard::Set($ENV{CLEARCASE_XPN});
#$CLIP = Win32::Clipboard();
#$CLIP->Set($ENV{CLEARCASE_XPN});


__END__
:endofperl

Теперь мы перешли (или начали переходить) с CC на Subversion, и один из моих пользователей довольно заинтересован в том, чтобы иметь те же функции в Subversion (и я полагаю, TortoiseSVN).

Кто-нибудь видел или пробовал что-то подобное в среде SVN?

2 ответа

Решение

В итоге я написал хук на стороне клиента, который использовал только стандартные инструменты Windows. Получившийся в результате файл bat, "tortoisesvn-post-commit.bat", закончился так

@echo off
rem TortoiseSVN Client Side post-commit hook script
rem script <Path> <Depth> <MessageFile> <Revision> <Error>
setlocal
set tsvnPath=%1
set tsvnDepth=%2
set tsvnMsgFile=%3
set tsvnRevision=%4
set tsvnError=%5
set tsvnCwd=%6

rem send the revision to the clipboard
echo %tsvnRevision% | clip
endlocal

Тогда было легко установить вызов из TortoiseSVN, чтобы использовать это. Перейдите в настройки, затем "Сценарии хуков" и добавьте хук с типом "post-commit-hook" и укажите это на приведенный выше скрипт.

Да, Tortoise SVN поддерживает хуки на стороне клиента.

Похоже, вы бы создали post-commit крюк для бега ...\path\to\perl ...\path\to\script.pl

хуки post-commit получают следующее в @ARGV:

$ARGV[0]: PATH
$ARGV[1]: DEPTH
$ARGV[2]: MESSAGEFILE
$ARGV[3]: REVISION
$ARGV[4]: ERROR
$ARGV[5]: CWD 

Они определены в связанном документе.

Так что сценарий будет

use strict;
use warnings;

use Win32::Clipboard qw( );

my $clip = Win32::Clipboard();
$clip->Set($ARGV[3]);

Непроверенные.

Другие вопросы по тегам