2011-01-06 13 views
5

Nach jedem Commit in 'trunk' führen wir automatisch eine Reihe von Tests gegen trunk durch. Wenn diese Tests bestanden werden, möchte ich eine automatische Zusammenführung in eine Verzweigung mit der Bezeichnung "Tests-bestanden" durchführen. Wenn die Tests fehlschlagen, sollte keine Zusammenführung erfolgen, aber sobald das Problem beim nächsten oder späteren Commit auf "trunk" behoben wurde, sollten alle Änderungen zusammengeführt werden.Wie kann ich automatisch svn zusammenführen, wenn automatisierte Tests bestehen?

Der Punkt ist, eine Verzweigung zu haben, die den gleichen Inhalt wie trunk hat, aber das ist nur ein bisschen vernünftiger als 'trunk', weil zumindest die automatisierten Tests bestanden haben.

Ich habe ein Skript, das versucht, das manuell zu tun, aber es ist ein Hack mit benutzerdefinierten Eigenschaften, die nicht immer richtig funktioniert - wie ich gerade herausgefunden habe. Wie mache ich Subversion das am besten?

+0

Wie planen Sie, Zusammenführungskonflikte zu behandeln? – Steve

+1

Ich glaube nicht, dass es zu Konflikten kommen sollte: 'testet-passed' hat immer den gleichen Inhalt wie 'trunk', außer wenn HEAD auf 'trunk' die Tests nicht besteht und in diesem Fall den gleichen Inhalt wie "Kofferraum" das letzte Mal, als die Tests bestanden haben. –

Antwort

5

Führen Sie diese Befehle an der Wurzel einer Arbeitskopie von Tests umgangen, wenn Sie festgestellt haben, dass eine neue Stamm Revision <somerev> die Tests bestanden hat:

svn update 
svn merge http://example.com/svn/myproject/trunk -r 0:<somerev> 
svn commit -m "merged trunk revisions up to <somerev> into tests-passed" 

Jedes Mal, wenn Sie den Merge-Befehl verwenden, SVN aufzeichnet die Verschmelzung in der svn:mergeinfo Eigenschaft. Daher sollte der obige Befehl automatisch bestimmen, welche Revisionen im Bereich 0:<somerev> für die Zusammenführung geeignet sind, ausgenommen alle Zusammenführungen, die bereits durchgeführt wurden.

Wie Sie in einem Kommentar gesagt haben, sind Konflikte nicht zu erwarten. Aber manchmal habe ich unerwartete Konflikte beim Zusammenführen einer Reihe von SVN-Revisionen mit Umbenennungen bemerkt. Um diese Konflikte zu beseitigen, können Sie die Option --accept theirs-full mit dem Befehl merge verwenden, um immer den Amtsleitungsstatus zu akzeptieren.

+0

Ah, die "automatisch bestimmen, welche Revisionen ... sind berechtigt" ist cool, das wusste ich nicht. Ich dachte, ich müsste das irgendwie selbst analysieren, was hässlich klang. Wie empfehlen Sie, dass ich finde? Ich habe 'svnversion trunk' versucht, oder muss es +1 sein? –

+0

@Johannes: Es muss nicht +1 sein. Wenn zum Beispiel der letzte erfolgreiche Build für Revision 100 ist, können Sie '-r 0: 100' zusammenführen. –

0

Ich könnte mir vorstellen, die Testsuite zu verwenden.

Meiner Erfahrung nach würde ich ein ANT-Skript ausführen, um meinen Code zu testen, und eine abschließende Bedingung haben, um die Verzweigung auszuführen, wenn die Tests erfolgreich waren.

+0

Wir führen die Tests tatsächlich mit Ameisen durch, und wir haben eine Endbedingung, wie Sie sagen. Die Frage ist: Wie mache ich Svn die richtige Zusammenführung basierend auf dieser Bedingung? –

+0

Verfolgen Sie den Namen_Spacing mit jedem neuen Code. (code_ versioning) könnte in dieser Situation helfen. – NaV

+0

Ähem? Ich habe keine Ahnung, wovon du redest ... –

1

Sie können dafür ein Continuous Integration Tool verwenden. Ein ziemlich beliebt: Hudson

http://hudson-ci.org/

können Sie Skript, dass ein solches Verhalten gibt.

+0

Meine Frage bezieht sich wiederum auf den svn-Teil, nicht auf den Zeitplan oder den Scripting-Teil. Es sei denn, Hudson hat irgendeine svn Magie, von der ich nichts weiß?(Unser Setup hier verwendet Hudson, um die Builds und die Tests als Reaktion auf Checkins auf "Trunk" zu starten) –

Verwandte Themen