Je viens de passer plusieurs jours à tergiverser à propos de cette question. Il y a des produits de tiers disponibles et beaucoup de scripts PERL et Python mais je voulais quelque chose de simple et une langue que je connaissais donc fini par écrire des crochets dans une application console C#. Il est très direct:
public void Main(string[] args)
{
string repositories = args[0];
string transaction = args[1];
var processStartInfo = new ProcessStartInfo
{
FileName = "svnlook.exe",
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardOutput = true,
RedirectStandardError = true,
Arguments = String.Format("log -t \"{0}\" \"{1}\"", transaction, repositories)
};
var p = Process.Start(processStartInfo);
var s = p.StandardOutput.ReadToEnd();
p.WaitForExit();
if (s == string.Empty)
{
Console.Error.WriteLine("Message must be provided");
Environment.Exit(1);
}
Environment.Exit(0);
}
Vous pouvez alors invoquer ce sur la pré engager en ajoutant un fichier pré-commit.cmd dans le dossier hooks du repo avec la ligne suivante:
[path]\PreCommit.exe %1 %2
Vous pouvez Considérez cela exagéré mais finalement c'est seulement quelques minutes de codage. De plus, vous bénéficiez de l'avantage de la suite linguistique .NET, qui est de loin préférable aux alternatives. Je vais étendre mes hooks de manière significative et écrire les tests appropriés contre eux aussi - un peu difficile à faire avec un fichier batch DOS! Par défaut, le code a été adapté de this post.
Marque se assurer aussi le fichier de patch. Il corrige 2 bugs –