svnで特定パス直下のファイルを消せなくする術
先日codereposのlang/perlをぶっとばしてしまったのですが、
それを解消すべく特定パス直下はdelできなくするHookをかいてみる。
svnのpre-commitのHookでは
REPOS="$1" TXN="$2" /path/to/svn_pre_commit_hook.pl "$TXN" "$REPOS" || exit 1
と、書いておく。
svn_pre_commit_hook.plはこんなん
#! /usr/bin/perl use strict; use warnings; use SVN::SVNLook; my $TXN = shift; my $REPOS = shift; my $svnlook = SVN::SVNLook->new( repo => $REPOS, cmd => '/usr/bin/svnlook' ); my ($adds, $dels, $mods) = $svnlook->fileschanged(transaction => $TXN); my $abort_fg=0; for my $path (@$dels) { if ($path =~ m{lang/perl/([^/]+)/$}) { $abort_fg=1; } } if ($abort_fg) { exit(1); } else { exit; }
id:yappoこんなんでどうすかね。
遅いのでここで失礼しまふ。
abort処理の所method分けてテストかかねば。。
だいたいこれで動く。
SVN::SVNLook使わなくてpre-commit時に
/usr/bin/svnlook changed -t "$TXN" "$REPOS"
したのをperl側にわたしてやってもそこで処理してもよかったりするかも。
YAMLとかに消されちゃまずいところ列挙してまとめて防いでもいいかも。
今日はここまで。
テストめんどくせーとおもったけど、$TXNめもっといてばしばし叩けばよかったかも。。
ねむひ
つか$abort_fgとかしなくてそこでexitすればいいか。。