Subject: Re: git broken for AIX somewhere between 2.13.2 and 2.13.3

From: Ævar Arnfjörð Bjarmason <[email-masked]>
Date: Sun, 29 Jul 2018 22:05:52 +0200

On Sun, Jul 29 2018, Michael wrote:

> On 29/07/2018 20:10, brian m. carlson wrote:
>> On Sun, Jul 29, 2018 at 06:44:26PM +0200, Michael wrote:
>>> root@x066:[/tmp/xxx]git --version
>>> git version 2.13.3
>>> root@x066:[/tmp/xxx]git clone [email-masked]:aixtools/hello-world.git
>>> Cloning into 'hello-world'...
>>> remote: Counting objects: 3, done.
>>> remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3
>>> Receiving objects: 100% (3/3), done.
>>> fatal: pack is corrupted (SHA1 mismatch)
>>> fatal: index-pack failed
>>>
>>> p.s. - what surprises me re: git-2.13.2 - no messages about 'Cloning into
>>> ...', which version 2.13.1 did give.
>>>
>>> I guess a bisect is the next step - between version 2.13.2 and 2.13.3. Other
>>> suggestions welcome!
>> Are you using SHA1DC on that system, and does compiling with another
>> SHA-1 implementation help?  There was a change to the SHA1DC code big
>> endian detection in that commit, which might be the cause of your
>> problems if you're using a POWER or PowerPC system.
>
> I was thinking it might be an 'endian' issue. So, yes - AIX runs on
> POWER, only as BigEndian.
>
> git bisect returns:
>
> michael@x071:[/data/prj/aixtools/git/github/git-master]git bisect bad
> Bisecting: 1 revision left to test after this (roughly 1 step)
> [35049a2343948f686861e176a8c395f9f67da7b6] Merge branch
> 'aw/contrib-subtree-doc-asciidoctor' into maint
> michael@x071:[/data/prj/aixtools/git/github/git-master]git bisect good
> Bisecting: 0 revisions left to test after this (roughly 0 steps)
> [9936c1b52a39fa14fca04f937df3e75f7498ac66] sha1dc: update from upstream
>
>
> michael@x071:[/data/prj/aixtools/git/github/git-master]git bisect bad
> 9936c1b52a39fa14fca04f937df3e75f7498ac66 is the first bad commit
> commit 9936c1b52a39fa14fca04f937df3e75f7498ac66
> Author: Ævar Arnfjörð Bjarmason <[email-masked]>
> Date: Sat Jul 1 22:05:45 2017 +0000
>
>  sha1dc: update from upstream
>
>  Update sha1dc from the latest version by the upstream maintainer[1].
>
>  See commit 6b851e536b ("sha1dc: update from upstream", 2017-06-06) for
>  the last update.
>
>  This solves the Big Endian detection on Solaris reported against
>  v2.13.2[2], hopefully without any regressions. A version of this has
>  been tested on two Solaris SPARC installations, Cygwin (by jturney on
>  cygwin@Freenode), and on numerous more boring systems (mainly
>  linux/x86_64). See [3] for a discussion of the implementation and
>  platform-specific issues.
>
>  See commit a0103914c2 ("sha1dc: update from upstream", 2017-05-20) and
>  6b851e536b ("sha1dc: update from upstream", 2017-06-06) for previous
>  attempts in the 2.13 series to address various compile-time feature
>  detection in this library.
>
>
> 1. https://github.com/cr-marcstevens/sha1collisiondetection/commit/19d97bf5af05312267c2e874ee6bcf584d9e9681
>
>
> 2. <CAKKM46tHq13XiW5C8sux3=[email-masked]>
> (https://public-inbox.org/git/CAKKM46tHq13XiW5C8sux3=[email-masked]/)
>
>  3. https://github.com/cr-marcstevens/sha1collisiondetection/pull/34
>
>  Signed-off-by: Ævar Arnfjörð Bjarmason <[email-masked]>
>  Signed-off-by: Junio C Hamano <[email-masked]>
>
> :040000 040000 a84797967fb742e4ca9618a641d53ce3a6c6589b
> 32efa656d78901da961e4a47d84b6d82fede064b M sha1dc

Sorry about that. As can be seen from those PRs and the "git log"
detecting whether something is big endian or not can be quite tricky, we
figured out how to do it on both BSD and Solaris, but apparently broke
AIX as a result.

You should be able to define -DSHA1DC_FORCE_LITTLEENDIAN or
-DSHA1DC_FORCE_BIGENDIAN (looks like you'll need the latter) to get the
latest version to compile, but I and upstream cr-marcstevens would be
very interested to know from someone who knows AIX how this broke.

Also, to you and anyone else with access to AIX: I'd be happy to figure
these issues out pro-actively if you give me a login to an AIX
machine. I promise not to do anything except compile/debug/test git on
it.

I used to have access to an AIX box through a previous job ages ago,
it's a very interesting OS and like with Solaris it's easy to discover a
lot of portability issues.