Bug 53036

Summary: FixCRLF does not respect the eol="asis" setting
Product: Ant Reporter: snake.scaly
Component: Core tasksAssignee: Ant Notifications List <notifications>
Status: RESOLVED FIXED    
Severity: normal    
Priority: P2    
Version: nightly   
Target Milestone: 1.9.0   
Hardware: PC   
OS: All   
Attachments: Sample Windows project to reproduce the bug

Description snake.scaly 2012-04-04 23:11:28 UTC
Created attachment 28545 [details]
Sample Windows project to reproduce the bug

FixCRLF task always converts line endings to platform-default even if eol="asis" option is specified.

Steps to reproduce in Windows:

1) Create a simple Ant project for conversion, for example:

<project name="test">
        <target name="crlf">
                <fixcrlf file="test.txt"
                         destDir="out"
                         eol="asis"
                         tab="remove"
                         tablength="4"/>
        </target>
</project>

2) Create a test file, test.txt, for example:

^I^Ia$
^Ib$

where "^I" is a single TAB character and "$" is a single LF character.

3) Build the "crlf" target:

$ ant crlf


Observed result: the out/test.txt file has each TAB character replaced with 4 spaces, and each end of line represented with CRLF sequence.

Expected result: the out/test.txt file should have each TAB character replaced with 4 spaces but EOLs should stay LF-only.


Steps to reproduce in *NIX: same, but make sure that the initial test.txt file in step 2 uses DOS convention for line endings, for example:

$ unix2dos test.txt

After the crlf target is built, the out/test.txt will have LF line endings while expected result is the original CRLF line endings


Attached is a sample project which can be used to reproduce the bug in Windows.


Tested build: apache-ant-1.9.0alpha nightly build #296 (Mar 19, 2012 12:02:44 AM)

Tested platforms:
1) Windows 7 Enterprise
2) Red Hat Enterprise 6.2 kernel 2.6.32-220.4.2.el6.x86_64
Comment 1 J.M. (Martijn) Kruithof 2012-05-26 20:47:19 UTC
Cause found, but the function is quite old.

ASIS currently is implemented to always go to the platform encoding, this has been so since the beginning. Indeed this does not match the documentation.

as the documentation is quite explicit on how to achieve the platform encoding (by not specifying the eol attribute, I will change the behaviour of ASIS to indeed leave eols always alone.

fixlast will never apply in case eol behaviour is ASIS.