Frage

Ich habe den folgenden pre-commit Skript für SVN zu bestätigen, dass ein Benutzer die Mindestmenge an Informationen vorgelegt hat auf einer Datei begehen. Wenn jedoch ein Verzeichnis hinzufügen / löschen versuchen, jetzt ist es versagt. Ich weiß, warum es offensichtlich versagt, ich habe einfach nicht erkennen, der pre-commit-Skript auf jeder Aktion aufgerufen wurde. Wie filtere ich für die Aktion durchgeführt werden? Kann ich das mit svn log oder muss ich etwas anderes benutzen?

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

Wie kann ich testen, für das, was svn Befehl in der aktuellen Transaktion exectued wird? Im Grunde nur ich mag, dass die Validierung auf einer laufen svn commit und keine Kopie, mkdir, etc ...

Vielen Dank im Voraus !!!

EDIT: ich wahrscheinlich mit der ursprünglichen Nachricht Klärung sollte, verwende ich TortoiseSVN Ordner erstellen ..., dies zu tun. Vielleicht eine Art von Operation begehen TortoiseSVN tut?

War es hilfreich?

Lösung

Ich habe keine große Antwort für Sie, aber ...

Vielleicht können Sie svnlook changed --copy-info verwenden, um ein wenig zu helfen. Mit dem können Sie feststellen, ob ein Element von irgendwo kopiert wurde. Wenn alle Elemente kopiert werden, dann kann es sicher sein, diese Anweisung von einer svn copy zu übernehmen. Ebenso, wenn Sie die Einzelteile zurück, die Überprüfung, sollten Sie in der Lage sein, zu bestimmen, ob er aus dem Hinzufügen oder Löschen ein Verzeichnis auch war (da es nur ein einziges Verzeichnis Element sein wird, hinzugefügt oder gelöscht werden.)

Hoffe, es hilft etwas ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top