Frage

Was ist der beste Ansatz, um zu schreiben, Haken für Subversion in Windows?Soweit ich weiß, werden nur die ausführbaren Dateien verwendet werden können.Also, was ist die beste Wahl?

  • Plain batch-Dateien (sehr begrenzt, aber vielleicht OK, für sehr einfache Lösung)
  • Gewidmet kompilierte ausführbare Anwendungen (sledgehammer to crack a nutshell?)
  • Einige andere hybrid-Wahl (wie eine batch-Datei ausführen eines Powershell-Skript)
War es hilfreich?

Lösung

Ich verbrachte gerade mehrere Tage procrastinating über genau diese Frage.Es gibt Produkte von Drittanbietern verfügbar, und viele PERL-und Python-Skripten, aber ich wollte etwas einfach und eine Sprache, die mir vertraut war, so endete das schreiben Haken in einem C# - Konsolen-app.Es ist sehr einfach:

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

Sie können dann ruft diese auf pre-commit durch hinzufügen eines pre-commit.cmd-Datei, die den Haken Ordner des repo mit der folgenden Zeile:

[path]\PreCommit.exe %1 %2

Sie können prüfen, diese übertrieben, aber letztlich ist es nur ein paar Minuten von Codierung.Was mehr ist, erhalten Sie den Vorteil der .NET-Sprache-suite, die IMHO ist weit besser als die alternativen.Ich werde erweitern Sie meinen Haken aus signifikant und schreiben entsprechende tests gegen Sie als auch – etwas schwer zu tun, dies Sie mit einer DOS-batch-Datei!

BTW, der code wurde angepasst dieser Beitrag.

Andere Tipps

Wir haben komplexe Anforderungen wie:

  1. Nur bestimmte Benutzer können Ordner erstellen, in der Teile des SVN-Baum, aber jeder kann Dateien Bearbeiten, die es
  2. Bestimmte Dateierweiterungen enthalten können bestimmten text in der Datei
  3. Bestimmte Dateierweiterungen können nur gespeichert werden, in einer Teilmenge von Verzeichnissen
  4. Sowie einige einfachere möchten, Müssen ein commit-Kommentar
  5. Regression getestet werden durch ausführen von neuen Haken gegen alle vorherigen SVN commit

#5 ist riesig für uns, es gibt keinen besseren Weg zu wissen, du bist nicht gonna break verpflichtet sich vorwärts zu bewegen, als in der Lage, schieben Sie alle vorherigen verpflichtet, über Ihre neuen Haken.Macht den Haken zu verstehen, dass 1234 wurde eine überarbeitung und 1234-1 war einer Transaktion und die entsprechende argument änderungen beim Aufruf svnlook, etc.war die beste Entscheidung, die wir während des Prozesses.

Für uns ist die Nuss bekam, groß genug, dass eine komplett-Einheit getestet werden, regression getestet, C# console exe machte am meisten Sinn.Wir haben die config-Dateien, die feed-Verzeichnis Einschränkungen, analysieren die bestehenden httpd_authz Datei zu, um die "privilegierte" Benutzer, etc.Waren wir nicht unter Windows mit ein .NETTO-Entwicklung der Arbeit, die Kraft hätte ich wohl geschrieben, alles in Python, aber da andere vielleicht brauchen, zu unterstützen, es in der Zukunft ging ich .NET über .FLEDERMAUS, .VBS, Powershell Albernheit.

Ich persönlich denke, Powershell ist anders genug aus .NET werden meist nutzlos als "scripting" - Sprache.Es ist gut, wenn nur die cmd-line-support für ein Produkt kommt per PS (Exchange, Windows 2k8), etc.aber wenn alles, was Sie tun wollen, ist, analysiert werden einige text-oder access regelmäßig .NET-Objekte PS fügt nur eine verrückte syntax und dumm Security Eisernen Vorhang und dem, was sein könnte, schnell und einfach kleine .NET app.

Check CaptainHook, "ein einfaches plugin-framework für das schreiben von Subversion-Haken verwenden ."NETTO".

Je nach Komplexität, jede situation ist anders, Wenn ich mich einfach nur dem verschieben von Dateien herum, ich Schreibe eine schnelle batch-Datei.Wenn ich will, etwas zu tun mehr komplexe Krank normalerweise nur überspringen Sie die scripting-Teil und schreiben Sie eine kurze c# - Programm, das damit umgehen kann.

Die Frage ist dann setzen Sie das c# - Programm in svn und haben es versioniert :)

edit: Die Vorteile einer eigenen c# - Anwendung, die ich wiederverwenden kann, code-Fragmente zu erstellen, die neue Haken später, darunter eine einfache log-Ausgabe habe ich handle hook logging.

Ich habe geschrieben hooks in Python auf Windows-da gibt es viele Beispiele im Netz (normalerweise für Linux, aber die Unterschiede sind klein).Wir verwenden auch Trac integrierte mit SVN und es ist ein Trac-API zugänglich, die über Python das ermöglicht uns automatisch erstellen/ändern Trac tickets von SVN-hook-Skripte.

Wenn Sie haben eine ausführbare php-Datei, die Sie mit Hilfe von einfachen php-Klasse, die Sie schreiben können-hook-Skript in php wie es hier gezeigt wird http://www.devhands.com/2010/01/subversion-hook-php-framework-in/

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