2009-12-02 11 views
6

現在のリリース番号を検索して出力したり、テキストファイルに書き込んだりするスクリプトがあります。今の唯一の問題は、このバージョン番号をPHINGプロパティにどうやって取得するのかです。Phing、コマンドを呼び出してその出力をプロパティに取得

現在、私のPHINGターゲットはbuild.zipとbuilt.tarをビルドしています。build-1.0.0.zipをビルドするか、バージョンスクリプトが現在のバージョンを決定しても構いません。これどうやってするの?自分の「仕事」を作り出さなければなりませんか?

答えて

6

このために独自のタスクを作成する必要があります。タスクは何かのような...

<?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); 
    } 
} 

を見てもそうすれば、次に、あなたがしなければならない、この時点でタスク

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

を呼び出すビルドXMLで

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

をタスクを定義しますビルドxml全体で$ {version.number}を使用してバージョン番号にアクセスできるようにします。

希望すると便利です。

15

代替方法として、ExecTaskのoutputProperty属性を使用して、ビルドファイルにプロパティを指定します。

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

More information

3

WindowsとLinuxの両方で動作します別のアプローチ。

<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}"/> 

ファイルの最後の行は単純にバージョン番号であり、ファイル内のバージョン番号を更新するとします。これを試して。

<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

CakePHPビルドスクリプトからコピーされました。 – cgTag

1

また、WindowsとLinuxの両方で動作し、代替と最良の方法(私の意見)は、それがLoadFileTask

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

また、あなたがfilterchain

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

More information

を使用することができますネイティブのタスクを使用しています
関連する問題