Gancho precompilation de SVN para evitar confirmaciones a twigs específicas

¿Cuál es una forma posible de bloquear svn commits a twigs específicas usando c #? ¿Cómo podría get la ruta de la twig de los arguments en el enlace precompromiso? (o cualquier otra sugerencia para get el path para bloquear)

¿Hay alguna manera de hacer esto usando svnlook para ver qué files modificó, quizás?

¡Cualquier sugerencia es altamente apreciada!

Cuando tuve que hacer esto, seguí esta guía: http://www.troyhunt.com/2010/02/creating-subversion-pre-commit-hooks-in.html

Escribí una aplicación de C # que llamaba a svnlook y fue activada por el enganche precommit para verificar si la ruta estaba permitida o no.

A continuación está mi código, debe ser fácilmente adaptable a su situación:

class Program { static void Main(string[] args) { var repos = args[0]; var txn = args[1]; var log = GetSvnLookOutput(repos, txn, "log"); var changedPaths = GetSvnLookOutput(repos, txn, "changed"); var logValidation = GetLogMessageErrors(log.Replace("\r", "").Replace("\n", "")); if (logValidation != null) { Console.Error.WriteLine(logValidation); Environment.Exit(1); } if (log.Contains("Autoversioning commit")) { // this is an autoversion webdav client, enforce path rules var changedPathsValidation = GetFileNameErrors(changedPaths); if (changedPathsValidation != null) { Console.Error.WriteLine(changedPathsValidation); Environment.Exit(1); } } Environment.Exit(0); } private static string GetLogMessageErrors(string log) { if (string.IsNullOrEmpty(log)) { return "Log message is requinetworking."; } return null; } private static string GetFileNameErrors(string changedPaths) { var changeRows = Regex.Split(changedPaths.TrimEnd(), Environment.NewLine); foreach (var changeRow in changeRows) { var filePath = changeRow.Substring(4, changeRow.Length - 4); if (filePath.ToLower().Contains("/code/")) { return "Autoversioning commits are not allowed inside /CODE/ folders. Use a SVN client for this."; } } return null; } private static string GetSvnLookOutput(string repos, string txn, string subcommand) { var processStartInfo = new ProcessStartInfo { FileName = @"svnlook.exe", UseShellExecute = false, CreateNoWindow = true, RedirectStandardOutput = true, RedirectStandardError = true, Arguments = String.Format("{0} -t \"{1}\" \"{2}\"", subcommand, txn, repos) }; var process = Process.Start(processStartInfo); var output = process.StandardOutput.ReadToEnd(); process.WaitForExit(); return output; } }