Ok - got it working. Below is the test script.  Finally worked out to do it 
from your old posts about this from 2009 :)

Many Thanks.

<?xml version="1.0" encoding="UTF-8"?>
<project name="resource-collection-delete-sample" default="tryit">

    <property name="test-dir" value="${basedir}/testdata"/>

    <target name="setup-files">
        <delete dir="${test-dir}"/>
        <mkdir dir="${test-dir}"/>
        <mkdir dir="${test-dir}/xxfile1"/>
        <mkdir dir="${test-dir}/012"/>
        <mkdir dir="${test-dir}/011"/>
        <mkdir dir="${test-dir}/1"/>
        <touch file="${test-dir}/1/test"/>
        <sleep milliseconds="100" />
        <mkdir dir="${test-dir}/2"/>
        <touch file="${test-dir}/2/test"/>
        <sleep milliseconds="100" />
        <mkdir dir="${test-dir}/3"/>
        <touch file="${test-dir}/3/test"/>
        <sleep milliseconds="100" />
        <mkdir dir="${test-dir}/4"/>
        <touch file="${test-dir}/4/test"/>
        <sleep milliseconds="100" />
        <mkdir dir="${test-dir}/5"/>
        <touch file="${test-dir}/5/test"/>
        <sleep milliseconds="100" />
        <mkdir dir="${test-dir}/6"/>
        <touch file="${test-dir}/6/test"/>
        <sleep milliseconds="100" />
        <touch file="${test-dir}/44" />
        <sleep milliseconds="100" />
        <!-- create some files -->
    </target>

    <macrodef name="delete-dir-pattern">
        <attribute name="dir"/>
        <attribute name="regex"/>
        <sequential>
            <resources id="resource-all-dirs">
                <dirset dir="@{dir}" >
                    <filename regex="@{regex}" />
                </dirset>
            </resources>
            <resources id="resource-last-3-dirs">
                <last count="3">
                    <sort>
                        <dirset dir="@{dir}" >
                            <filename regex="@{regex}" />
                        </dirset>
                        <date />
                    </sort>
                </last>
            </resources>

            <pathconvert property="dirs-to-delete" pathsep=",">
                <difference>
                    <resources refid="resource-all-dirs"/>
                    <resources refid="resource-last-3-dirs" />
                </difference>
                <regexpmapper from="(^.*$)" to="\1\${file.separator}**" />
            </pathconvert>

            <echo message="To delete:${dirs-to-delete}"/>

            <delete verbose="true">
                <files includes="${dirs-to-delete}"/>
            </delete>
        </sequential>
    </macrodef>

    <target name="delete-files">
        <!-- delete all but last few old release directories -->
        <delete-dir-pattern dir="${test-dir}" regex="^\d+$"/>
    </target>

    <target name="tryit" depends="setup-files, delete-files">
    </target>


</project>


-----Original Message-----
From: Matt Benson [mailto:gudnabr...@gmail.com] 
Sent: 11 February 2014 15:43
To: Ant Users List
Subject: Re: Resource collections - Linux vs. windows

Yeah, I have a feeling you are running into some problem having to do with 
non-empty subdirectories.  Usually some creative sorting, etc., can help.
 The delete task should know how to handle this with filesets; I believe its 
page in the manual mentions this very problem. Therefore you might try using 
the pathconvert task to create a list of includes for a fileset and pass *that* 
to the delete task. Keep us updated on your progress.

Matt


On Tue, Feb 11, 2014 at 9:30 AM, Kimpton, C (Chris) < 
chris.kimp...@rabobank.com> wrote:

> Good idea.
>
> It initially worked ok, when the directories were empty, but when I 
> added files to each (touch steps below), that caused the script to not 
> delete any files.
>
> And now I see that it does not work on Windows either ...  my tests 
> used empty directories.
>
> Does this sound like a bug or am I missing some subtlety around 
> resource collections/dirset and non-empty subdirectories...
>
> Thanks in advance.
>
> Here is my test file:
>
>
> <?xml version="1.0" encoding="UTF-8"?> <project 
> name="resource-collection-delete-sample" default="tryit">
>
>     <property name="test-dir" value="${basedir}/testdata"/>
>
>     <target name="setup-files">
>         <delete dir="${test-dir}"/>
>         <mkdir dir="${test-dir}"/>
>         <mkdir dir="${test-dir}/xxfile1"/>
>         <mkdir dir="${test-dir}/1"/>
>         <touch file="${test-dir}/1/test"/>
>         <sleep milliseconds="100" />
>         <mkdir dir="${test-dir}/2"/>
>         <touch file="${test-dir}/2/test"/>
>         <sleep milliseconds="100" />
>         <mkdir dir="${test-dir}/3"/>
>         <touch file="${test-dir}/3/test"/>
>         <sleep milliseconds="100" />
>         <mkdir dir="${test-dir}/4"/>
>         <touch file="${test-dir}/4/test"/>
>         <sleep milliseconds="100" />
>         <mkdir dir="${test-dir}/5"/>
>         <touch file="${test-dir}/5/test"/>
>         <sleep milliseconds="100" />
>         <mkdir dir="${test-dir}/6"/>
>         <touch file="${test-dir}/6/test"/>
>         <sleep milliseconds="100" />
>         <touch file="${test-dir}/44" />
>         <sleep milliseconds="100" />
>         <!-- create some files -->
>     </target>
>
>     <target name="delete-files">
>         <!-- delete all but last few old release directories -->
>         <resources id="resource-all-dirs">
>             <dirset dir="${test-dir}" >
>                 <filename regex="^\d+$" />
>             </dirset>
>         </resources>
>         <resources id="resource-last-3-dirs">
>             <last count="3">
>                 <sort>
>                     <dirset dir="${test-dir}" >
>                         <filename regex="^\d+$" />
>                     </dirset>
>                     <date />
>                 </sort>
>             </last>
>         </resources>
>         <delete verbose="true">
>             <difference>
>                 <resources refid="resource-all-dirs"/>
>                 <resources refid="resource-last-3-dirs" />
>             </difference>
>         </delete>
>     </target>
>
>     <target name="tryit" depends="setup-files, delete-files">
>     </target>
>
> </project>
>
>
>
>
> -----Original Message-----
> From: Matt Benson [mailto:gudnabr...@gmail.com]
> Sent: 11 February 2014 14:15
> To: Ant Users List
> Subject: Re: Resource collections - Linux vs. windows
>
> Can you expand your example into a self-contained example that builds 
> up an appropriate structure first, then still fails on Linux?
>
> Matt
>
>
> On Tue, Feb 11, 2014 at 2:21 AM, Kimpton, C (Chris) < 
> chris.kimp...@rabobank.com> wrote:
>
> > Hi,
> >
> > I have a target that is trying to delete some directories, all but 
> > the last few.  It works as expected (I believe - it deletes files 
> > when
> > expected) on my dev box (windows), but is not deleting anything on 
> > the build server (Linux):
> >
> > It builds up 2 resource collections - one for all directories and 
> > one for the last few and then does a delete based on the difference.
> >
> >         <resources id="resource-all-dirs">
> >             <dirset dir="${release-base-dir}" >
> >                 <filename regex="^\d+$" />
> >             </dirset>
> >         </resources>
> >
> >         <resources id="resource-last-3-dirs">
> >             <last count="4">
> >                 <sort>
> >                     <dirset dir="${release-base-dir}" >
> >                         <filename regex="^\d+$" />
> >                     </dirset>
> >                     <date />
> >                 </sort>
> >             </last>
> >         </resources>
> >
> >         <delete verbose="true">
> >             <difference>
> >                 <resources refid="resource-all-dirs"/>
> >                 <resources refid="resource-last-3-dirs" />
> >             </difference>
> >         </delete>
> >
> > I have tried running with debug and/or verbose but that does not 
> > seem to add anything.  Using version 1.9.3.
> >
> > Any tips on how to track down the issue?
> >
> > Cheers,
> > Chris
> >
> > _____________________________________________________________
> >
> > This email (including any attachments to it) is confidential, 
> > legally privileged, subject to copyright and is sent for the 
> > personal attention of the intended recipient only. If you have 
> > received this email in error, please advise us immediately and 
> > delete it. You are notified that disclosing, copying, distributing 
> > or taking any action in reliance on the contents of this information 
> > is strictly prohibited. Although we have taken reasonable 
> > precautions to ensure no viruses are present in this email, we 
> > cannot accept responsibility for any loss or damage arising from the 
> > viruses in this email or attachments. We exclude any liability for 
> > the content of this email, or for the consequences of any actions 
> > taken on the basis of the information provided in this email or its 
> > attachments, unless that
> information is subsequently confirmed in writing.
> > _____________________________________________________________
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscr...@ant.apache.org For additional 
> commands, e-mail: user-h...@ant.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@ant.apache.org
For additional commands, e-mail: user-h...@ant.apache.org

Reply via email to