2009-12-02 3 views
6

Ich habe ein Skript, das suchen und ausgeben oder schreiben Sie meine aktuelle Version # in eine Textdatei. Jetzt ist das einzige Problem, wie bekomme ich diese Versionsnummer in eine PHING-Eigenschaft.Phing, rufen Sie einen Befehl erhalten seine Ausgabe in eine Eigenschaft

Im Moment baut mein PHING-Ziel build.zip und built.tar, ich möchte, dass es build-1.0.0.zip erstellt oder was immer das Versions-Skript für die aktuelle Version ist. Wie kann ich das machen? Muss ich meine eigene "Aufgabe" erstellen?

Antwort

6

Möglicherweise müssen Sie hierfür eine eigene Aufgabe erstellen. Die Aufgabe kann etwa so aussehen ...

<?php 
require_once "phing/Task.php"; 

class VersionNumberTask extends Task 
{ 
    private $versionprop; 

    public function setVersionProp($versionprop) 
    { 
     $this->versionprop = $versionprop; 
    } 

    public function init() 
    { 
    } 

    public function main() 
    { 
     // read the version text file in to a variable 
     $version = file_get_contents("version.txt"); 
     $this->project->setProperty($this->versionprop, $version); 
    } 
} 

Dann würden Sie die Aufgabe in Ihrem Build xml definieren

<taskdef classname="VersionNumberTask" name="versiontask" /> 

dann die Aufgabe, rufen

<target name="dist"> 
    <versiontask versionprop="version.number"/> 
</target> 

An diesem Punkt sollten Sie In der Lage sein, auf die Versionsnummer zuzugreifen, indem Sie $ {version.number} in Ihrer Build-XML verwenden.

Hoffe, das hilft!

15

Ein alternativer Ansatz besteht darin, das Attribut outputProperty in der ExecTask zu verwenden, um eine Eigenschaft in Ihrer Build-Datei bereitzustellen.

<target name="version"> 
    <exec command="cat version.txt" outputProperty="version.number" /> 
    <echo msg="Version: ${version.number}" /> 
</target> 

More information

3

Ein alternativer Ansatz, der sowohl unter Windows und Linux funktioniert.

<exec executable="php" outputProperty="version.number"> 
    <arg value="-r" /> 
    <arg value="$fh=file('version.txt'); echo trim(array_pop($fh));" /> 
</exec> 
<echo msg="Current version is: ${version.number}"/> 

nimmt die letzte Zeile der Datei ist einfach die Versionsnummer, und wenn Sie möchten, dass die Versionsnummer in der Datei aktualisieren. Versuche dies.

<propertyprompt propertyName="release_version" defaultValue="${version.numver}" promptText="Enter version to be released."/> 
<exec executable="php"> 
    <arg value="-r" /> 
    <arg value="$file=file_get_contents('version.txt'); $file = str_replace('${version.number}', '${release_version}', $file); file_put_contents('version.txt', $file);" /> 
</exec> 
<echo msg="Version number updated." /> 
<property name="version.number" value="${release_version}" override="true" /> 
+0

Aus dem CakePHP-Build-Skript kopiert. – cgTag

1

auch alternative und beste Art und Weise (meiner Meinung nach), die sowohl unter Windows und Linux funktioniert, ist es verwenden nativen Aufgabe LoadFileTask

<loadfile property="myVersion" file="version.txt" /> 
<echo msg="Current version is: ${myVersion}"/> 

auch können Sie filterchain

<loadfile property="myVersion" file="version.txt"> 
    <filterchain><striplinebreaks /></filterchain> 
</loadfile> 
<echo msg="Current version is: ${myVersion}"/> 

More information

verwenden