【问题标题】:How to copy only a specific list of files from one directory to another using phing?如何使用 phing 仅将特定文件列表从一个目录复制到另一个目录?
【发布时间】:2016-07-05 09:58:43
【问题描述】:

我在变量 rolloutChanges 中有两个 git 修订之间的文件更改列表 -

<exec command="git diff -–name-only ${box.git_version} ${target.git_version}" outputProperty="rolloutChanges" dir="${dir.scratchpad}" />

我不确定理想情况下应该如何迭代这个变量,可能是通过将其准备为 phing 可识别的其他标准格式。

我看到这个答案涉及带有目标的 foreach - https://stackoverflow.com/a/4459526/351903,但没有掌握那里发生的事情。我什至无法在我的设置中运行该解决方案。

我检查了documentation for fileset,但没有看到支持变量的任何方式。还检查了这个Copy a whole directory with phing

更新

我了解了foreach和target的用法,并将其放在我的代码中,在exec命令之后-

<exec command="git diff --name-only ${box.git_version} ${target.git_version}" outputProperty="rolloutChanges" dir="${dir.scratchpad}/${dir.subdir}" />
<foreach list="${rolloutChanges}" param="eachFileToRollout" target="buildlang" />

我有以下任务 -

<target name="buildlang">
        <echo>Overwriting ${eachFileToRollout} </echo>
    </target>

现在,rolloutChanges 变量包含一个字符串,类似这样(从控制台获取)-

app/webroot/openx/www/delivery/file1.php
app/webroot/openx/www/delivery/file2.php

所以,目标块的输出是这样的(注意列表中只有一个元素,覆盖只打印一次) -

Overwriting app/webroot/openx/www/delivery/file1.php 
app/webroot/openx/www/delivery/file2.php

是否有一种将 exec 的输出放入列表的原生 phing 方式,以便创建与输出中的文件一样多的元素?

【问题讨论】:

    标签: php git phing file-copying fileset


    【解决方案1】:

    要使您的 foreach 解决方案正常工作,您需要指定分隔符,在您的情况下是换行符。

    ForeachTask 提供delimiter 属性(默认值:,)。将其设置为 &amp;#10; 以便在 Unix 样式的换行符处分隔字符串。与平台无关的值为${line.separator}

    【讨论】:

    • 哦,我错过了分隔符属性 :(。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    相关资源
    最近更新 更多