如何列出 Phing 中的隐藏目标

How to list hidden targets in Phing

我的build.xml有134个目标,其中大部分是隐藏的(hidden="true")。有没有办法从命令行列出所有目标?目标定义有时会分成多行,我通常对属性使用双引号字符。我在 Debian 上 运行 这个,排序目标的荣誉 and/or 也显示描述。 :-)

示例:

    <target name="example1" hidden="false" />

    <target name="example3" hidden="true" />

    <target
        description="Ipsum lorem"
        hidden="true"
        name='example3'
    >
        <phingcall target="example1" />
    </target>

你不能用 phing 本身。如果目标设置为 "hidden".

,代码将跳过显示

我们无法使用 Phing 执行此操作,但我们可以 Phing 中执行此操作。可能有比这更干净、更好的方法,但这可行——假设所有其他属性都用双引号引起来(即 just 通过上面的示例#3)

<target name="list_all" hidden="false">
    <property name="command" value="
        cat ${phing.file.foo}
        | perl -pe 's|^\s*||g' 
        | perl -0pe 's|\n([^&lt;])| |gs'
        | grep '&lt;target'
        | perl -pe &quot;s|name='([^']*)'|name=\&quot;\&quot;|g&quot;
        | perl -pe 's|^&lt;target(\s?)||'
        | perl -pe 's|(.*)([ ]?)depends=&quot;([^&quot;]*)&quot;([ ]?)(.*)| |g'
        | perl -pe 's|(.*)([ ]?)hidden=&quot;([^&quot;]*)&quot;([ ]?)(.*)| |g'
        | perl -pe 's|.*description=&quot;([^&quot;]*).*name=&quot;([^&quot;]*).*|name=&quot;&quot; description=&quot;&quot;|g'
        | perl -pe 's|name=&quot;([^&quot;]*)&quot;||g'
        | perl -pe 's|description=&quot;([^&quot;]*)&quot;|[]|g'
        | sort
        | uniq
    " override="true" />
    <exec command="${command}" passthru="true" />
</target>

这些线是做什么的?

1)输出build.xml的内容。在这里,我对名为 'foo';

的 'global' build.xml 感兴趣

2) 从每行中删除所有前导空格;

3) 删除换行符 within 每个开始标签;

4) 过滤以“

5) 将 name-属性 上的单引号改为双引号;

6, 7,8) 删除前导“

9) 在每行上移动 'description' after 'name';

10) 删除 'name=' 及其引号;

11) 用方括号替换 'description=' 及其引号;和

12, 13) 排序并删除重复项(如果有)

示例输出:

    example1
    example2
    example3 [Ipsum lorem]