Re: [bug] assertion in 2.8.4 triggering on old-ish worktree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Jun 17, 2016 at 7:48 AM, Stefan Beller <sbeller@xxxxxxxxxx> wrote:
> On Thu, Jun 16, 2016 at 10:59 AM, Junio C Hamano <gitster@xxxxxxxxx> wrote:
>> Chris Packham <judge.packham@xxxxxxxxx> writes:
>>
>>> On Thu, Jun 16, 2016 at 4:59 PM, Chris Packham <judge.packham@xxxxxxxxx> wrote:
>>>> Hi All,
>>>>
>>>> I have the git-sh-prompt configured in my .bashrc today I visited an
>>>> old worktree that I haven't really touched in a few years (sorry can't
>>>> remember the git version I was using back then). I received the
>>>> following output when changing to the directory
>>>>
>>>> git: pathspec.c:317: prefix_pathspec: Assertion `item->nowildcard_len
>>>> <= item->len && item->prefix <= item->len' failed.
>>>>
>>>> I assume it's one of the git invocations in git-sh-prompt that's
>>>> hitting the assertion. Any thoughts on what might be triggering it?
>>>> Any debug I can gather?
>>>
>>> A bit more info. The directory in question is a uninitialised
>>> submodule. It doesn't trigger in the root of the parent project.

The command that fails appears to be 'git check-ignore -q .'

>>
>>
>> Sounds like
>> http://article.gmane.org/gmane.comp.version-control.git/283549
>>
>
> I looked into this. In pathspec.c#prefix_pathspec (the function
> that has this assertion at the end), the assertion can only
> trigger if PATHSPEC_STRIP_SUBMODULE_SLASH_EXPENSIVE
> or PATHSPEC_STRIP_SUBMODULE_SLASH_CHEAP was given
> as these are the only places that reduce item->len.
>
<snip>

> Regarding the assert:
> We are sure it's a submodule related thing, so we can
> have a quite narrow warning there, roughly:
>
> diff --git a/pathspec.c b/pathspec.c
> index c9e9b6c..d0ea87a 100644
> --- a/pathspec.c
> +++ b/pathspec.c
> @@ -313,8 +313,11 @@ static unsigned prefix_pathspec(struct pathspec_item *item,
>         }
>
>         /* sanity checks, pathspec matchers assume these are sane */
> -       assert(item->nowildcard_len <= item->len &&
> -              item->prefix         <= item->len);
> +       if (item->nowildcard_len <= item->len &&
> +           item->prefix         <= item->len)
> +               die (_("Path leads inside submodule '%s', but the submodule "
> +                      "was not recognized, i.e. not initialized or deleted"),
> +                      ce->name);

This certainly would have pointed out the uninitialised state of my
setup in this case.

>         return magic;
>  }
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]