MKDIR을 확인하려면 SVN Pre-Commit 스크립트
-
11-09-2019 - |
문제
SVN에 대한 다음 사전 커밋 스크립트를 작성하여 사용자가 파일 커밋에 최소 정보를 제출했는지 확인했습니다. 그러나 디렉토리를 추가/삭제하려고 할 때 이제 실패합니다. 나는 그것이 분명히 실패한 이유를 알고 있습니다. 나는 사전 커밋 스크립트가 모든 행동에 대해 호출되었다는 것을 몰랐습니다. 수행중인 작업을 위해 어떻게 필터링합니까? 함께 할 수 있습니까? SVN 로그 아니면 다른 것을 사용해야합니까?
<?php
define('SVNLOOK', "\"C:\Program Files\CollabNet\Subversion Server\svnlook.exe\"");
define('NOTEXT', 1000);
define('NOPATTERNMATCH', 1001);
define('ERRORPROCESSING', 9999);
$repo_path = $argv[1];
$transaction = $argv[2];
$tracking_regex_pattern = "/\b(?:bug|issue|ter)\s*[#]{0,1}(\d+)\b/i";
exec(SVNLOOK . " log $repo_path -t$transaction", $revisions);
//loop through transaction message line by line for validation
$validation_passed = (bool) false;
$has_text = (bool) false;
foreach($revisions as $change_line){
$change_line = trim($change_line);
if (!empty($change_line)){
$has_text = true;
if (preg_match($tracking_regex_pattern, $change_line)) {
$validation_passed = true;
}
}
}
if(!$validation_passed){
switch($has_text) {
case true:
throwError(NOPATTERNMATCH, $revisions);
break;
case false:
throwError(NOTEXT, $revisions);
break;
default:
throwError(ERRORPROCESSING, $revisions);
break;
}
}else{
exit(0);
}
function throwError($error_code, $revisions){
$fp = fopen('php://stderr', 'w');
fwrite($fp, "********** (Error Code: $error_code) **********\n");
foreach($revisions as $change_line) {
fwrite($fp, $change_line."\n");
}
fclose($fp);
exit($error_code);
}
?>
현재 트랜잭션에서 어떤 SVN 명령이 자리 잡고 있는지 테스트합니까? 기본적으로 나는 유효성 검사 만 실행하기를 원합니다. SVN 커밋 그리고 사본이 아니라 mkdir 등 ...
미리 감사드립니다 !!!
편집하다: 원래 게시물을 명확히했을 것입니다. TortoisesVN의 Create Folder를 사용하고 있습니다. 아마도 TortoisesVN이 일종의 커밋 작업을하고 있습니까?
해결책
나는 당신에게 큰 대답이 없지만 ...
아마 당신은 사용할 수 있습니다 svnlook changed --copy-info
조금 도움이됩니다. 그것을 사용하여, 당신은 어딘가에서 항목을 복사했는지 알 수 있습니다. 모든 항목이 복사되면 5월 이것을 an에서 가정하는 데 안전하십시오 svn copy
지침. 마찬가지로, 반환 된 항목을 확인하면 디렉토리를 추가하거나 삭제 한 것인지 확인할 수 있어야합니다 (단일 디렉토리 항목이 추가되거나 삭제되는 단일 디렉토리 항목이므로).
다소 도움이되기를 바랍니다 ...
제휴하지 않습니다 StackOverflow