2017-01-02 8 views
0

git2svn을 사용하여 git로 마이그레이션 할 LOT (거의 300 개)의 SVN 저장소가 있습니다.PHP 스크립트의 CMD - 피드백 받기

GOLANG 및 PYTHON을 고려한 후, 가장 쉬운 방법은 PHP를 사용하는 것입니다. 불량일 수도 있습니다 의심스러운 결정이지만 쉽게 보입니다.

15 분 후에 I did have a script이 다소 이상하게 작동합니다. 추악한 스크립트지만, 그것은 하나의 타이머입니다.

문제는 프로세스가 많은 시간이 필요하다는 것입니다. 심지어 거의 비어 있지 않은 간단한 repos가 30 초가 걸릴 수도 있습니다. 그리고 심지어 분. 큰 것들 - 심지어 10 분 - 생산에 들어가기 전에, 나는 어떤 피드백 메커니즘을 원합니다 - 그래서 나는 실제로 무슨 일이 일어나고 있는지 볼 수 있습니다. 이 ..하지만

$cmd = "cd ".$GITrepoPath." && svn2git svn://127.0.0.1/". $repoName . " --username " .$SVNusername ." --authors authors.txt --notags --nobranches --notrunk"; 
      $output = shell_exec($cmd); 
      echo "<pre>$output</pre>"; 

각 REPO 어디 I 수 마무리 처리 .. 실제 cmd 실행 좋아하지에만 이후 지금의

..as는 스크립트 출력과 같이 명령 피드백을 수행 단계를 참조하십시오.

나는 그게 내가 필요에 가까운 수 있습니다 발견 된 유일한 문제는 here했다 -하지만 솔직히 - 나는 대답에서 많은 이해하지 않았다 ...

나는 단지 하나의 타이머 스크립트 알고 -하지만 유스 케이스는 실제로 그것을 달성하는 방법에 관심이있었습니다 (가능하다면).

나는 win7 로컬 머신에 있지만 가능한 경우 * nix에 대해서도 알고 싶습니다.

답변

0

명령을 실행하는 백그라운드에서 스크립트 또는 프로그램을 실행하고 데이터베이스의 레코드를 업데이트하는 것이 좋습니다. 그런 다음 AJAX 등을 사용하여 레코드 변경에 대해 서버를 폴링 할 수 있습니다. 이것은 사용자에게 좋은 환경을 제공합니다.

데이터베이스 테이블의 열 이름은 "finished"와 같을 수 있으며 부울이 참이면 데이터베이스의 전체 내용을 알고 데이터베이스에 출력을 저장할 수 있습니다.

0

shell_exec 프로세스가 닫힐 때까지 대기합니다. CMD와 마찬가지로 프로세스를 생성하고 청취해야합니다. 이 방법으로 기능을 사용하십시오 :

$cmd = ''; // your command here 
$output_storage = []; 
$output_showed = []; 
$result = null; 
exec($cmd, $output_storage, $result); 
while($result === null){ 
    $diff = array_diff($output_storage, $output_showed); 
    if($diff){ 
     // all new outputs here as $diff 
     $output_showed = $diff; 
    } 
}