Есть ли задача муравья, которую можно копировать без потери разрешений - PullRequest
6 голосов
/ 03 апреля 2012

Я знаю, что могу <exec executable="cp" failonerror="true">, однако, я действительно предпочел бы задачу, которую я могу вызывать из любой ОС, которая может использовать все (или, по крайней мере, большинство) атрибутов для copy, нокоторый не высасывает разрешения на Unix.

Мне интересно, есть ли уже решение, или мне придется написать свое собственное copy2.

Как я былбоюсь, ничего нет "с полки".У нас есть этот код, но он обрабатывает только каталог с копией каталога или файл с копией файла, имеет пользовательские атрибуты и не выполняет никаких других полезных действий, которые делает копирование.

<!-- ==================================================================== -->
<!-- Copy files from A to B                                               -->
<!-- <copy> would do this job, if it weren't such a useless pile of fail  -->
<!-- and could manage to preserve execute bits on Linux                   -->
<!-- ==================================================================== -->
<macrodef name="internal-copydir">
    <attribute name="fromdir" default="NOT SET" />
    <attribute name="todir" default="NOT SET" />
    <sequential>
        <if>
            <os family="windows" />
            <then>
                <copy todir="@{todir}">
                    <fileset dir="@{fromdir}" />
                </copy>
            </then>
            <else>
                <exec executable="rsync" failonerror="true">
                    <arg value="-a" />
                    <arg value="@{fromdir}/" />
                    <arg value="@{todir}/" />
                </exec>
            </else>
        </if>
    </sequential>
</macrodef>

<!-- ==================================================================== -->
<!-- Copy file from A to B                                                -->
<!-- <copy> would do this job, if it weren't such a useless pile of fail  -->
<!-- and could manage to preserve execute bits on Linux                   -->
<!-- ==================================================================== -->
<macrodef name="internal-copyfile">
    <attribute name="file" default="NOT SET" />
    <attribute name="tofile" default="NOT SET" />
    <sequential>
        <if>
            <os family="windows" />
            <then>
                <copy file="@{file}" tofile="@{tofile}"/>
            </then>
            <else>
                <exec executable="cp" failonerror="true">
                    <arg value="@{file}" />
                    <arg value="@{tofile}" />
                </exec>
            </else>
        </if>
    </sequential>
</macrodef>

Я написал этоттоже.

<!-- ==================================================================== -->
<!-- Copy file to a directory                                             -->
<!-- <copy> would do this job, if it weren't such a useless pile of fail  -->
<!-- and could manage to preserve execute bits on Linux                   -->
<!-- ==================================================================== -->
<macrodef name="internal-copyfiletodir">
    <attribute name="file" default="NOT SET" />
    <attribute name="todir" default="NOT SET" />
    <sequential>
        <if>
            <os family="windows" />
            <then>
                <copy file="@{file}" todir="@{todir}"/>
            </then>
            <else>
                <exec executable="cp" failonerror="true">
                    <arg value="@{file}" />
                    <arg value="@{todir}/" />
                </exec>
            </else>
        </if>
    </sequential>
</macrodef>

Ответы [ 2 ]

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

Я не знаю ни одного. Как упомянуто в документации Ant, это связано с тем, что в JRE не было механизма для управления разрешениями файлов. Задача Ant Copy

Java 7 обеспечивает гораздо лучшую поддержку для такого рода вещей, так что, возможно, в будущей версии Ant это будет возможно. Это, вероятно, займет очень много времени, так как я думаю, что Ant только переходит на Java 5 для версии 1.9.

Полагаю, вы могли бы смоделировать поведение, которое ищете, условно выполняя специфические для ОС команды, основанные на ОС?

3 голосов
/ 17 мая 2013

Это не идеально, но есть задача «chmod», которую вы можете использовать для установки разрешений для каждого файла после «copy» или «copydir»:

http://ant.apache.org/manual/Tasks/chmod.html

...