如何使用phing仅将特定文件列表从一个目录复制到另一个目录?

时间:2016-03-18 15:10:48

标签: php git phing file-copying fileset

我在变量rolloutChanges -

中的两个git修订版之间有这个文件更改列表
<exec command="git diff -–name-only ${box.git_version} ${target.git_version}" outputProperty="rolloutChanges" dir="${dir.scratchpad}" />

我不确定这个变量应该如何理想地迭代,也可以通过phing识别的其他标准格式进行准备。

我看到这个答案涉及目标 - 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的输出放入列表的原生方式,以便创建与输出中的文件一样多的元素?

1 个答案:

答案 0 :(得分:0)

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

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