SVN预提交脚本来检查的mkdir
-
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);
}
?>
我如何测试当前事务正在exectued什么SVN命令?基本上我只是想验证到上运行的 SVN提交并没有复制,MKDIR,等等...
预先感谢!!!
编辑:我也许应该用原来的岗位澄清,我使用TortoiseSVN的创建文件夹......做到这一点。也许TortoiseSVN是做某种提交操作?
解决方案
我没有给你一个伟大的答案,但...
也许你可以使用svnlook changed --copy-info
对大家有点帮助。利用这一点,你可以告诉我们,如果一个项目是从地方复制。如果所有项目被复制,那么它的可能的是安全的从svn copy
指令进行假设。同样,如果你检查的项目回来,你应该能够确定它是否是从添加或删除目录以及(因为它也只是添加或删除一个目录项。)
希望它可以帮助...有点
不隶属于 StackOverflow