Kann Apache Ant eine Aufgabe vollständig über einer Dateigruppe ausführen, ohne beim ersten Fehler anzuhalten?

348
Sean

Ich habe in ant ein Ziel eingerichtet, das eine PHP-Fusselprüfung für alle geänderten Dateien seit der letzten Prüfung durchführt.

<target name="lint" unless="lint.done"> <apply executable="php" taskname="lint" failonerror="true"> <arg value="-l"> <fileset dir="..."> <include name="**/*.php"> <modified/> </fileset> </apply> </target> 

Wenn dies fehlschlägt, weil eine einzelne Datei die Fusselprüfung nicht besteht, werden alle anderen Dateien leider nicht fusselfrei geprüft, sondern immer noch im geänderten Cache gespeichert. Die Datei, die den Fehler verursacht hat, wird ebenfalls zwischengespeichert. modified Dies bedeutet, dass die Prüfung bei der nächsten Ausführung der Prüfung bestanden wird, auch wenn keine Änderungen an der Ursache vorgenommen wurden, warum die Fusselprüfung fehlgeschlagen ist.

Wenn am Ende ein Flusenfehler auftritt, sollte der Build fehlschlagen. Der schwierige Teil besteht darin zu versuchen, es zum Scheitern zu bringen und nicht anzuhalten, bevor es nicht mit dem Fusseln fertig ist.

Die Lösung wäre, folgendes zu implementieren:

  • Wenn die Prüfung fehlschlägt, aktualisieren Sie den geänderten Cache nicht.
  • Wenn die Prüfung für eine Datei fehlschlägt, fahren Sie mit dem Linting anderer Dateien fort, aber kennzeichnen Sie den Build trotzdem als Fehler.

Sind eine oder beide dieser Lösungen möglich?

Für diesen ersten Punkt weiß ich, dass Sie ein Argument übergeben können, bei modifieddem der Cache nicht mehr aktualisiert wird. Könnten Sie modifiednach dem Flusentest eine zweite Sekunde aufrufen, um die Dateien nur dann zwischenzuspeichern, wenn der Test erfolgreich war?

Für den zweiten Punkt kann ich mir vor allem vorstellen, dass ich nicht bei einem Flusenfehler ausfalle, sondern die Ergebnisse der Flusen in ein Skript übergebe, das alle ausgefallenen Dateien gleichzeitig prüft und ausgibt, wenn dies erforderlich ist.

1
Nur zu Ihrer Information: Dies wurde ursprünglich in StackOverflow veröffentlicht, wurde aber gelöscht, da ich nicht wusste, auf welche Seite diese Frage am besten passen würde. Sean vor 8 Jahren 0

0 Antworten auf die Frage