Pregunta

escribí lo siguiente antes de comprometerse guión de SVN para validar que un usuario ha enviado la cantidad mínima de información en un archivo de comprometerse. Sin embargo, cuando se trata de añadir / eliminar un directorio, que ahora está fallando. Yo sé por qué está fallando, evidentemente, sólo que no realicen la pre-entrega de la escritura se pidió a cada acción. ¿Cómo filtro para la que se realiza la acción? ¿Puedo hacer eso con svn log o tengo que usar algo más?

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

¿Cómo se prueba por lo comando svn está siendo exectued en la transacción actual? Básicamente yo sólo quiero la validación se ejecute en un svn commit y no una copia, mkdir, etc ...

Gracias de antemano !!!

EDIT: que probablemente debería haber aclarado con el post original, estoy usando Crear carpeta de TortoiseSVN ... para hacer esto. Tal vez TortoiseSVN está haciendo algún tipo de operación de confirmación?

¿Fue útil?

Solución

No tengo una gran respuesta para usted, pero ...

Tal vez se puede utilizar svnlook changed --copy-info a ayudar un poco. Usando esto, se puede saber si un artículo fue copiado de algún sitio. Si todos los elementos se copian, entonces puede seguro asumir esto desde una instrucción svn copy. Del mismo modo, si la comprobación de los artículos devueltos, debe ser capaz de determinar si era de adición o eliminación de un directorio también (ya que será sólo un único elemento de directorio que se añade o se elimina.)

Espero que ayuda un poco ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top