Re: Adding nested repository with slash adds files instead of gitlink
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jun 19, 2018, 15:56 UTC
- Message-ID
- <xmqqmuvqwz07.fsf@gitster-ct.c.googlers.com>
- In-Reply-To
- <CACsJy8DQ-GGEDiV0iA2kTgNgHcT1sSX2Oqb7VZcjyK1nBOFv+A@mail.gmail.com>
Duy Nguyen <pclouds@gmail.com> writes:
Show 23 quoted lines
> On Tue, Jun 19, 2018 at 12:36 PM Heiko Voigt <hvoigt@hvoigt.net> wrote: >> >> On Mon, Jun 18, 2018 at 11:12:15AM -0700, Brandon Williams wrote: >> > On 06/18, Duy Nguyen wrote: >> > > This sounds like the submodule specific code in pathspec.c, which has >> > > been replaced with something else in bw/pathspec-sans-the-index. If >> > > you have time, try a version without those changes (e.g. v2.13 or >> > > before) to see if it's a possible culprit. >> > >> > I just tested this with v2.13 and saw the same issue. I don't actually >> > think this ever worked in the way you want it to Heiko. Maybe git add >> > needs to be taught to be more intelligent when trying to add a submodule >> > which doesn't exist in the index. >> >> That was also my guess, since my feeling is that this is a quite rare >> use case. Adding submodules alone is not a daily thing, let alone >> selecting different changes after 'git submodule add'. >> >> I also think git could be more intelligent here. > > Ah.. the "submodule not registered in index" case. I think I remember > this (because I remember complaining about it once or two times). > Definitely agreed that git-add should do the right thing here.
I am not sure if this even needs to be implemented as "look for the submodule in the index". Even before submodule was added, we knew that "git add foo/bar" should reject the request if we find foo is a symbolic link, and we should do the same when foo/ is a directory that is the top of a working tree under control of another repository, no?
Hmm, what happens when we do this?
git init ln -s /tmp foo >foo/bar git add foo/
I think we should say either "let's add foo symlink" or "foo/. (directory) is beyond symlink" (the latter is preferrable, but the former is acceptable as long as foo is pointing at a directory; but foo could be a dangling symlink whose pointee's type may not be discernable by "git add").
Shouldn't we be reacting pretty much the same when we see this?
git init git init foo >foo/bar git add foo/
That is, either drop '/' and add 'foo' as a submodule, or say "foo/. (directory) belongs to another repository, cannot add here" (again, the latter is preferrable for consistency with the symlink behaviour above).