Question

J'ai écrit le script pre-commit pour SVN pour valider qu'un utilisateur suivant a soumis le montant minimum d'informations sur un commit fichier. Cependant, lorsque vous essayez d'ajouter / supprimer un répertoire, maintenant il échoue. Je sais pourquoi il est évidemment défaut, je ne savais pas que le script pre-commit a été appelé à chaque action. Comment puis-je filtrer pour l'action en cours d'exécution? Puis-je faire avec svn log ou dois-je utiliser autre chose?

<?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);  
}
?>

Comment tester pour quelle commande svn est en cours exectued dans la transaction en cours? Fondamentalement, je ne veux que la validation à exécuter sur une svn commit et non une copie, mkdir, etc ...

Merci d'avance !!!

EDIT: Je devrais probablement clarifié avec le message original, j'utilise Créer le dossier de TortoiseSVN ... pour ce faire. Peut-être fait TortoiseSVN certains commettent genre d'opération?

Était-ce utile?

La solution

Je n'ai pas une grande réponse pour vous, mais ...

Peut-être que vous pouvez utiliser svnlook changed --copy-info pour aider un peu. En utilisant cela, vous pouvez dire si un article a été copié quelque part. Si tous les éléments sont copiés, puis peut être sûr d'assumer ce à partir d'une instruction svn copy. De même, si vous vérifier les articles retournés, vous devriez être en mesure de déterminer si elle était d'ajouter ou de supprimer un répertoire aussi bien (car il sera juste un élément de répertoire unique étant ajoutés ou supprimés.)

it helps un peu ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top