Phing, вызов команды, чтобы получить ее вывод в свойство - PullRequest
6 голосов
/ 03 декабря 2009

У меня есть скрипт, который может искать и выводить или записывать мой текущий выпуск # в текстовый файл. Теперь единственная проблема заключается в том, как мне получить этот номер версии в свойстве PHING.

Прямо сейчас моя цель PHING builds build.zip и build.tar, я хотел бы, чтобы он собрал build-1.0.0.zip или что-то еще, что скрипт версии решит, какая версия сейчас. Как я могу это сделать? Должен ли я создать свою собственную «задачу»?

Ответы [ 4 ]

15 голосов
/ 06 апреля 2011

Альтернативный подход заключается в использовании атрибута outputProperty в ExecTask для предоставления свойства в файле сборки.

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

Дополнительная информация

6 голосов
/ 04 декабря 2009

Для этого вам может потребоваться создать собственное задание. Задача может выглядеть примерно так ...

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

Тогда вы бы определили задачу в вашей сборке xml

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

Тогда вызовите задачу

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

На этом этапе вы сможете получить доступ к номеру версии, используя $ {version.number} во всей xml вашей сборки.

Надеюсь, это поможет!

4 голосов
/ 09 апреля 2012

Альтернативный подход, который работает как в 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" />
1 голос
/ 26 ноября 2013

Также альтернативный и лучший способ (мое мнение), который работает как в 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}"/>

Дополнительная информация

...