여기에 perl으로 작성된 것이 있습니다. 펄을 싫어한다면 적어도 자신의 스크립트에서 무엇을 할 지 아이디어를 줄 수 있습니다. 나는 그것을 읽을 수 있도록 쓰려고 노력했다.
이 호출을 사용하여 스크립트를 시작하십시오. svn status | perl scriptname.pl
.
스크립트는 svn status의 출력을 한 줄씩 읽습니다. 행이 추가, 수정/대체되거나 삭제 된 요소를 설명하고 요소의 경로를 해당 목록에 추가하는지 확인합니다. 그런 다음 FTP 서버에 연결을 시도하고 요소를 변경합니다.
FTP 부분이 완전히 테스트되지 않았습니다.
하위 요소가있는 폴더를 추가 할 때 SVN이 수행하는 작업을 테스트하지 않았습니다. 어쩌면 모든 하위 요소를 직접 에 추가해야합니다.
#!/usr/bin/perl
use Net::FTP;
use strict;
use warnings;
my $username = "username";
my $password = "password";
my $host = "example.com";
my $port = 20;
my $path = "/some/path/";
my @filesAdded;
my @filesModified;
my @filesDeleted;
while(<STDIN>) {
chomp;
if (/[A]...... (.+)/) {
push @filesAdded, $1;
} elsif(/[MR]...... (.+)/) {
push @filesModified, $1;
} elsif (/[D]...... (.+)/) {
push @filesDeleted, $1;
}
}
print "========================[ CHANGES ]========================\n";
print "filesAdded[".(scalar @filesModified)."]=".(join ", ", @filesModified)."\n";
print "filesModified[".(scalar @filesModified)."]=".(join ", ", @filesModified)."\n";
print "filesDeleted[".(scalar @filesDeleted)."]=".(join ", ", @filesDeleted)."\n";
print "==========================[ FTP ]==========================\n";
{
my $ftp = Net::FTP->new(Host => $host, Port => $port) or die "Cannot connect to $host: [email protected]";
$ftp->login($username, $password) or die "Cannot login ", $ftp->message;
$ftp->cwd($path) or die "Cannot change working directory ", $ftp->message;
for my $fileAdded (@filesAdded) {
if(-f $fileAdded) {
$ftp->put($fileAdded);
} elsif(-d $fileAdded) {
$ftp->mkdir($fileAdded, 1);
}
}
for my $fileModified (@filesModified) {
$ftp->put($fileModified, $fileModified);
}
for my $fileDeleted (@filesDeleted) {
if(-f $fileDeleted) {
$ftp->delete($fileDeleted);
} elsif(-d $fileDeleted) {
$ftp->rmdir($fileDeleted, 1);
}
}
$ftp->quit;
}
print "========================[ SUCCESS ]========================\n";
게시 이유는 무엇입니까? 요구 사항은 모두가 원격 서버에서 테스트되었을 때만 svn에서 로컬 변경 사항을 커밋하기 때문입니다. –