Move != Copy
TechnologieIch habe gerade an einem automatisierten Build-Script für eventon.de gearbeitet, da das Deployment einer neuen Version bisher mit etwas Tipparbeit verbunden war. Als Automations-Tool hab ich mich für Phing, einem ANT-Klon, entschieden. Alles funktionierte bestens, doch das Umbenennen eines Verzeichnisses war doch etwas merkwürdig.
Das Umbenennen dauerte Ewigkeiten und die Statusmeldungen verrieten auch den Grund: [move] Copying 426 file to ...
Dabei wollte ich doch nur den Verzeichnisnamen ändern, und das so schnell wie möglich. Nach einem Blick in den Sourcecode war dann alles klar: class MoveTask extends CopyTask { ...
. Es wurde tatsächlich das komplette Verzeichnis, Datei für Datei, kopiert und das Quellverzeichnis anschließend gelöscht.
Unter ANT gibt es das Target rename, welches in Phing nirgends aufzufinden war. Also habe ich das Manko gleich behoben, in dem ich den RenameTask nachimplementiert haben. (Download: RenameTask.php). Der Code ist alles andere als schön, aber er tut seinen Zweck.
Wer ihn nutzen will, kopiert die Datei nach /usr/lib/php/phing/tasks/ext/ (ohne die .txt-Endung) und fügt in seine Build.xml folgende Zeile ein, um den Task zu nutzen:
<taskdef name="rename" classname="phing.tasks.ext.RenameTask" />
Der RenameTask funktioniert analog zum ANT-Task.