Subject: Re: t0028-working-tree-encoding.sh failing on musl based systems (Alpine Linux)

From: Kevin Daudt <[email-masked]>
Date: Sat, 9 Feb 2019 15:57:32 +0100

On Fri, Feb 08, 2019 at 08:42:19PM +0000, brian m. carlson wrote:
> On Fri, Feb 08, 2019 at 09:23:36PM +0100, Kevin Daudt wrote:
> > Firstly, the tests expect iconv -t UTF-16 to output a BOM, which it
> > indeed does not do on Alpine. Secondly, git itself also expects the BOM
> > to be present when the encoding is set to UTF-16, otherwise it will
> > complain.
> 
> Yeah, we definitely want to require a BOM for UTF-16. As previously
> mentioned, it isn't safe for us to assume big-endian when it's missing.
> 
> > I tried change the test to manually inject a BOM to the file (and
> > setting iconv to UTF-16LE / UTF16-BE, which lets the first test go
> > through, but test 3 then fails, because git itself output the file
> > without BOM, presumably because it's passed through iconv.
> > 
> > So I'm not sure if it's a matter of just fixing the tests.
> 
> I think something like the following will likely work in this scenario:
> 
> [..]
> 
> This passes for me on glibc, but only on a little-endian system. If this
> works for musl folks, then I'll add a config option for those people who
> have UTF-16 without BOM.
> -- 
> brian m. carlson: Houston, Texas, US
> OpenPGP: https://keybase.io/bk2204

I tried your patch. The pre-requisite is broken in it's current form,
this would fix the prerequisite:

    diff --git a/t/t0028-working-tree-encoding.sh b/t/t0028-working-tree-encoding.sh
    index ff02d03bad..734c5a7dbb 100755
    --- a/t/t0028-working-tree-encoding.sh
    +++ b/t/t0028-working-tree-encoding.sh
    @@ -7,8 +7,7 @@ test_description='working-tree-encoding conversion via gitattributes'
     GIT_TRACE_WORKING_TREE_ENCODING=1 && export GIT_TRACE_WORKING_TREE_ENCODING

     test_lazy_prereq NO_BOM '
    -       printf abc | iconv -f UTF-8 -t UTF-16 &&
    -       test $(wc -c) = 6
    +       test $(printf abc | iconv -f UTF-8 -t UTF-16 | wc -c) = 6
     '

     write_utf16 () {

But test 3 still fails, because now the output from git is converted to
UTF16-LE, which is different from the input, which is UTF16-BE.