threads / discuss / 57248

merge-ort assertion failure

Subject: merge-ort assertion failure

## tl;dr

3 messages between Jan 14, 2022 and Jan 14, 2022.

replies: 2people: 2as markdown or json

Taylor Blau· Jan 14, 2022, 19:46 UTC · lore
Elijah,

A colleague reported that they were able to hit an assertion failure in merge-ort when rebasing a topic of their back onto upstream.

The scenario (which I have been able to reproduce on a private repository, but haven't had time to reduce further) is:

    $ git --version
    git version 2.34.1
    $ git rebase origin/master
    warning: skipped previously applied commit 9cda243afc2a
    warning: skipped previously applied commit 882bb87a3a7c
    hint: use --reapply-cherry-picks to include skipped commits
    hint: Disable this message with "git config advice.skippedCherryPicks false"
    [some "Auto-merging" messages ...]
    CONFLICT (content): Merge conflict in
    [some file]
    warning: exhaustive rename detection was skipped due to too many files.
    warning: you may want to set your merge.renamelimit variable to at least 165 and retry the command.
    Assertion failed: (renames->cached_pairs_valid_side == 0), function
    clear_or_reinit_internal_opts, file merge-ort.c, line 546.
    Abort trap: 6

Their merge.renameLimit is set pretty low at just "1", and this assertion goes away so long as `merge.renameLimit` is set sufficiently high.

I haven't had a chance to look into it very deeply yet. Elijah: I figure that this is the sort of thing that may be totally obvious to you, so I'm sharing it here in case it is.

Otherwise, I'll continue to poke at it locally and see if I can learn anything else.

Thanks, Taylor

Elijah Newren· Jan 14, 2022, 22:15 UTC · re: Taylor Blau · lore

Re: merge-ort assertion failure

On Fri, Jan 14, 2022 at 11:46 AM Taylor Blau <me@ttaylorr.com> wrote:
Show 33 quoted lines
>
> Elijah,
>
> A colleague reported that they were able to hit an assertion failure in
> merge-ort when rebasing a topic of their back onto upstream.
>
> The scenario (which I have been able to reproduce on a private
> repository, but haven't had time to reduce further) is:
>
>     $ git --version
>     git version 2.34.1
>
>     $ git rebase origin/master
>     warning: skipped previously applied commit 9cda243afc2a
>     warning: skipped previously applied commit 882bb87a3a7c
>     hint: use --reapply-cherry-picks to include skipped commits
>     hint: Disable this message with "git config advice.skippedCherryPicks false"
>     [some "Auto-merging" messages ...]
>     CONFLICT (content): Merge conflict in
>     [some file]
>     warning: exhaustive rename detection was skipped due to too many files.
>     warning: you may want to set your merge.renamelimit variable to at least 165 and retry the command.
>     Assertion failed: (renames->cached_pairs_valid_side == 0), function
>     clear_or_reinit_internal_opts, file merge-ort.c, line 546.
>     Abort trap: 6
>
> Their merge.renameLimit is set pretty low at just "1", and this
> assertion goes away so long as `merge.renameLimit` is set sufficiently
> high.
>
> I haven't had a chance to look into it very deeply yet. Elijah: I figure
> that this is the sort of thing that may be totally obvious to you, so
> I'm sharing it here in case it is.

I don't have a testcase (though I think there is probably enough information here for me to create one), but I think I know the problem. Does this fix it for you? : https://github.com/git/git/pull/1193

Taylor Blau· Jan 14, 2022, 22:29 UTC · re: Elijah Newren · lore

Re: merge-ort assertion failure

On Fri, Jan 14, 2022 at 02:15:31PM -0800, Elijah Newren wrote:
Show 10 quoted lines
> On Fri, Jan 14, 2022 at 11:46 AM Taylor Blau <me@ttaylorr.com> wrote:
>
> > I haven't had a chance to look into it very deeply yet. Elijah: I figure
> > that this is the sort of thing that may be totally obvious to you, so
> > I'm sharing it here in case it is.
>
> I don't have a testcase (though I think there is probably enough
> information here for me to create one), but I think I know the
> problem.  Does this fix it for you? :
> https://github.com/git/git/pull/1193

Unfortunately not. With a sufficiently small value of merge.renameLimit (in my case, just 1) I can trigger the same assertion failure:

    $ GIT_DEBUGGER=1 git.compile -c merge.renameLimit=1 rebase $onto
    [...]
    Thread 1 "git" hit Breakpoint 1, clear_or_reinit_internal_opts (opti=0x55555b0cf3f0, reinitialize=0) at merge-ort.c:546
    546				assert(renames->cached_pairs_valid_side == 0);
    (gdb) p renames->cached_pairs_valid_side
    $1 = -1

Short of providing a small, reproducible test-case, I'm happy to share any information I can about the repository that might be useful to you.

Thanks, Taylor

← back to recent threads