Question

Je suis en cours d'exécution SVN sur un serveur Windows, et j'utilise des scripts Perl pour mettre en œuvre des crochets pré-COMMIT. Je vois le message d'erreur suivant TortoiseSVN:

  

Erreur !! ScriptError !! Impossible d'analyser   ligne: chemin _U / vers / fichiers / trunk

et c'est le script:

foreach my $line (`$svnlook changed -t "$txn" "$repos"`)
{
  chomp($line);
  if ($line !~ /([AUD]).\s\s(.+)$/)
  {
    print STDERR "!!Script Error!! Can't parse line: $line\n";
    exit(1);
  }
  else
  {
     # perform some actions 
  }
}

exit(0);

J'ai essayé de remplacer l'expression rationnelle avec des choses comme /_([AUD]).\s\s(.+)$/ sans sucess -. J'ai même essayé /.*([AUD]).\s\s(.+)$/

Pensées? Suggestions?

Était-ce utile?

La solution

Sans un regard sur la documentation SVN Je suis juste deviner: Dans la sortie ci-dessus un seul espace est indiqué entre U et le chemin réel, mais vous avez \s\s dans toutes vos expressions rationnelles.

[modifier] Ok, maintenant j'ai regardé dans le svnlook référence . Tout d'abord, votre regex échoue pour les versions actuelles de svnlook, comme la sortie est spécifié comme suit:

  • Les deux premières colonnes contiennent l'état
  • le chemin d'accès à partir de la cinquième colonne
  • Condition peut être l'un de A (ajouté), U (le contenu modifié), D (deleted), _U (propriétés) des modifications, et UU (contenu + propriétés modifiées)

Alors, vous devriez être en mesure de faire correspondre avec quelque chose comme ^([_AUD]+)\s+(.+)$. On peut être plus précis, mais ce n'est pas nécessaire.

Si cela ne correspond pas, s'il vous plaît tuyau de sortie de la commande dans un fichier, et afficher la partie pertinente ici.

Autres conseils

if ($line !~ /^_?([AUD])\s+(.+)$/ devrait fonctionner correctement.

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