سؤال

كتبت البرنامج النصي قبل الالتزام التالي ل 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، الخ ...

شكرا مقدما!!!

تعديل: ربما كان من المحتمل أن أكون قد أوضحت مع المشاركة الأصلية، وأنا أستخدم مجلد Creatoissvn Create ... للقيام بذلك. ربما السلاحفتين تفعل نوعا من عملية الالتزام؟

هل كانت مفيدة؟

المحلول

ليس لدي إجابة رائعة بالنسبة لك، ولكن ...

ربما يمكنك استخدام svnlook changed --copy-info للمساعدة قليلا. باستخدام ذلك، يمكنك معرفة ما إذا كان قد تم نسخ عنصر من مكان ما. إذا تم نسخ جميع العناصر، فذلك مايو كن آمنا لتحمل هذا من svn copy تعليمات. وبالمثل، إذا قمت بالتحقق من العناصر التي تم إرجاعها، يجب أن تكون قادرا على تحديد ما إذا كان من خلال إضافة أو حذف دليل أيضا (نظرا لأن ذلك سيكون مجرد عنصر دليل واحد يتم إضافته أو حذفه.)

آمل أن يساعد إلى حد ما ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top