2 Stimmen

Dateien unter svn im Hook-Skript ändern

Wie lässt sich eine bestimmte Datei am besten ändern? unter unser Repository im Rahmen eines post_commit Haken ?

z.B.: Ich möchte eine Prüfsummenzeile an eine somefile.conf-Datei anhängen

4voto

sbi Punkte 211669

Vielleicht möchten Sie lesen dieses Kapitel des SVN-Buches. Am Ende steht die folgende Warnung in einem schönen roten Kasten:

Obwohl Hook-Skripte fast alles können, gibt es eine Dimension, in der Hook-Skript-Autoren Zurückhaltung üben sollten: Ändern Sie eine Commit-Transaktion nicht mit Hook-Skripten. Es mag zwar verlockend sein, Hook-Skripte zu verwenden, um Fehler, Unzulänglichkeiten oder Richtlinienverstöße in den Dateien, die übertragen werden, automatisch zu korrigieren, aber das kann zu Problemen führen. Subversion speichert bestimmte Daten des Projektarchivs auf der Client-Seite, und wenn Sie eine Übergabe-Transaktion auf diese Weise ändern, werden diese Caches unbemerkt veraltet. Diese Inkonsistenz kann zu überraschendem und unerwartetem Verhalten führen. Anstatt die Transaktion zu ändern, sollten Sie die Transaktion einfach im Pre-Commit-Hook validieren und den Commit zurückweisen, wenn er nicht den gewünschten Anforderungen entspricht. Als Bonus werden Ihre Benutzer den Wert sorgfältiger, auf die Einhaltung von Vorschriften bedachter Arbeitsgewohnheiten lernen.

2voto

Ether Punkte 51044

Tun Sie dies nicht in einem Hook - tun Sie es in einer separaten Änderung, die andere Benutzer dieses Zweiges dann in ihre Arbeitskopie ziehen können. Es muss nicht komplizierter sein als dies (in Pseudocode):

  • Skript holt eine Arbeitskopie aus dem Repository in das lokale Verzeichnis
  • Skript modifiziert Datei
  • Das Skript überträgt die Datei mit einer guten Übertragungsnachricht, z. B. "Skript Foo: Hinzufügen einer Prüfsumme".

Es ist nicht ungewöhnlich, dass Build-Skripte (die unter Cron laufen oder durch ein Makefile ausgelöst werden) periodische Revisionen an einem Repository vornehmen, z.B. indem sie Dateien auf der Grundlage anderer Dateien neu erzeugen. Manchmal werden diese Dateien in das Repository eingecheckt und manchmal nicht, je nachdem, wer diese Dateien auf welche Weise verwendet.

1voto

Jim T Punkte 12090

Es ist kein Problem, das, was Sie vorschlagen, mit einem Post-Commit-Hook zu machen, aber seien Sie sich bewusst, dass es eine neue Revision zum Repository hinzufügt und dass der ursprüngliche Committer eine Aktualisierung durchführen muss, bevor er die Änderungen, die das Skript gemacht hat, sehen kann. Außerdem verlangsamt es den Commit, da der Post-Commit ausgeführt wird, bevor der Commit-Vorgang beendet ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X