DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=26901>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=26901

regex with file mapper incorrectly handles ${file.separator}

           Summary: regex with file mapper incorrectly handles
                    ${file.separator}
           Product: Ant
           Version: 1.6.0
          Platform: PC
        OS/Version: Windows XP
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: Core
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


The documentation for <mapper> states: 
"Note that Ant will not automatically convert / or \ characters in the to and
from attributes to the correct directory separator of your current platform. If
you need to specify this separator, use ${file.separator} instead."

We are using <mapper type="regex"> to copy a directory structure that looks like
this:
/Root/
  /sub1/
    /src/scripts/files..
  /sub2/
    /src/scripts/files..
  /sub3/
    /src/scripts/files..
  /sub4/
    /src/scripts/files..

to this:
/NewRoot/
  /sub1/
    /files..
  /sub2/
    /files..
  /sub3/
    /files..
  /sub4/
    /files..

To do it we are using <mapper> with <copy> like this:
<copy todir="NewRoot">
  <mapper type="regexp" 
    from="(.*?).src.scripts.(.*)" 
    to="\1${file.separator}\2"/> 
  <fileset dir="Root">
    <include name="**/src/scripts/*"/>
  </fileset>
</copy>

The problem happens with the ${file.separator}, we expect the results as stated
above, what we are actually getting is this:
/NewRoot/
  /sub1/
    /2
  /sub2/
    /2
  /sub3/
    /2
  /sub4/
    /2
(the 2's are files)
If we modify the mapper's "to" regex to this:
  to="\1${file.separator}${file.separator}\2"

The results are what we expect.  I believe the problem lies in the handling of
regular expressions and how ant is using substitution.  We are on a windows
machine, so the "to" regex (in the buggy case) will resolve to something like
this before sending the regular expression off to Java (using the standard Reg
ex handling with Java 1.4):
  sub1\\2

Java then interprets the 2 "\"s to be a literal "\" and ant is then left to map
everything to the filename "2".

Let me know if you need more information.

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

Reply via email to