Hello,

I have a stylistic question to the copy task and the mappers.

I have the following situation: I have four directories, one
reference/source directory, one reference/compiled directory, one
current/source directory and a current/compiled directory:

+- reference
|  +- source
|  +- compiled
|
+- current
   +- source
   +- compiled


The task is to copy all the files from the reference/compiled directory to
the current/compiled directory, for which the source files does not differ.

e.g:
reference/source
* equal.ref  
* diff.ref
* only_ref.ref

reference/compiled
* same as above with .bin suffix

current/source
* equal.ref (equal to reference/source)
* diff.ref (different content)

current/compiled
<<empty>>

In the situation above the task should only copy
'reference/compiled/equal.bin' to the 'current/compiled' directory.

Currently I implemented this with a <for> loop over a fileset, which
includes the equal files of the both source directories. In the loop, I
change the filename/path of the reference/source folder to the reference
compiled folder.
This works, but does not look very nice. 
Is there an easier solutions (The compilation has nothing to do with
Java/C++, so that dedicated tasks for this cannot be used).

And finally here the code snippet, how it is currently implemented:

<property name="current.source"     value="current\source" />
<property name="current.compiled"   value="current\compiled" />
<property name="reference.source"   value="reference\source" />
<property name="reference.compiled" value="reference\compiled" />

<!-- replace backslashes with slashes, so that the path can be used in 
        regular expressions -->
<propertyregex property="normalized.current.source" override="true" 
        input="${current.source}" regexp="\\" replace="/" />
<propertyregex property="normalized.reference.compiled"  override="true" 
        input="${reference.compiled}"  regexp="\\" replace="/" />

<!-- Iterate over the files, which are equal in both source directories -->
<for param="filename" >
        <fileset dir="${current.source}" includes="**/*.ref" >
                <not>
                        <different targetdir="${reference.source}" 
                                ignoreFileTimes="true" 
                                ignoreContents="false" />
                </not>
        </fileset>
<sequential>
        <propertyregex property="normalized.filename" override="true" 
                input="@{filename}" regexp="\\" replace="/" />
        <!-- replace the path to the source with the path to the compiled
reference -->
        <propertyregex property="normalized.filename" override="true" 
                input="${normalized.filename}" 
                regexp="(.*)${normalized.current.source}/([^/]*)\.([^/\.]*)"

                select="\1${normalized.reference.compiled}/\2.bin" />
        <copy file="${normalized.filename}" todir="${current.compiled}" />
</sequential>
</for>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to