2014-03-29 3 views
0

다음은 문제 정의입니다. 작업 복사본에 로컬 변경 사항이 있습니다. 나는 svn st 명령으로 그들을 나열 할 수 있습니다. 예제 출력;FTP를 통해 원격 서버에 Svn 상태가 출력됩니까?

M  admin/controller/common/forgotten.php 
M  admin/controller/sale/contact.php 
A + admin/model/tool/mail.php 
D  catalog/view/theme/default/template/mail/order.tpl 
D  catalog/view/theme/default/template/mail/recommend.tpl 
A + mail_template 

원격 서버가 있으며이 변경 사항을 테스트 용으로 원격 서버에 원격 서버에 전송하려고합니다. 괜찮 으면 내가 그걸 트렁크에 맡길거야.

이제 파일을 찾아서 FTP 클라이언트에서 하나씩 선택하여 업로드합니다. 그러나 때로는 변경된 파일이 훨씬 더 많은 시간을 소모하는 경우가 있습니다.

그래서이 작업을 스크립트 또는 도구에서 자동으로 수행하려고합니다. 어떠한 제안? 아니면이 문제에 대한 작은 응용 프로그램을 작성해야합니까?

답변

0

여기에 으로 작성된 것이 있습니다. 펄을 싫어한다면 적어도 자신의 스크립트에서 무엇을 할 지 아이디어를 줄 수 있습니다. 나는 그것을 읽을 수 있도록 쓰려고 노력했다.

이 호출을 사용하여 스크립트를 시작하십시오. 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"; 
+0

게시 이유는 무엇입니까? 요구 사항은 모두가 원격 서버에서 테스트되었을 때만 svn에서 로컬 변경 사항을 커밋하기 때문입니다. –

관련 문제