git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [RFC-PATCHv2] submodules: add a background story

From
Stefan Beller <sbeller@google.com>
Date
Feb 14, 2017, 22:10 UTC
Message-ID
<CAGZ79kbjSLaUsJH_KuT6EiC+Kt-87+GjONt08hCytXULecMijA@mail.gmail.com>
In-Reply-To
<xmqq4lzw8mim.fsf@gitster.mtv.corp.google.com>
On Tue, Feb 14, 2017 at 1:56 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 17 quoted lines
> Stefan Beller <sbeller@google.com> writes:
>
>> If we were to redesign the .gitmodules file, we might have it as
>>
>>     [submodule "path"]
>>         url = git://example.org
>>         branch = .
>>         ...
>>
>> and the "path -> name/UID" mapping would be inside $GIT_DIR.
>
> I am not sure how you are going to keep track of that mapping,
> though.  If .gitmodules file does not have a way to tell that what
> used to be at "path" in its v1.0 is now at "htap" (instead the above
> seems to assume there will just be an entry for [submodule "htap"]
> in the newer version, without anything that links the old one with
> the new one), how would the mapping inside $GIT_DIR know?

It depends. Maybe git-mv could have rewritten the internal mapping as well.

Maybe it would work similar to a rename detection utilizing a bloomfilter that includes all recorded sha1s at a given path and then we can take the sha1 from the a given path and check for each absorbed submodule git dir if that commit belongs to this repo.

I did not quite think it through, but I was pointing out this is brittle. I guess a quick way would be to follow the .git file inside the submodule if that exists and if not build up an internal cache that can map "path -> potential git dirs".

Of course we can argue that the same problem applies to e.g. remotes:
If I have
    remote.origin.url = git://kernel.org and
    remote.mirror.url = kernel.googlesource.com
then swapping the urls will of course yield different behavior
for 'origin' and 'mirror'. But in this case it is obvious because
"origin" is not the same string as "kernel.org".

So long term, maybe we should come up with a better default name for submodules, e.g. just a hash of say the URL being used when adding the submodule.

>  Don't
> forget that name was introduced as the identity because we cannot
> assume that URL for a single project will never change.

Yes, URL and path can both change over time, which is why it is a good idea to have them versioned as well as having a way to overwrite the URL in the config later on.

> I fully agree that our documentation and user education should
> stress that names must be unique and immultable throughout the
> history of a superproject, though.

This would be a good paragraph in this "background story" that this patch tries to write. I'll add that.

Thanks, Stefan

Previous: Junio C HamanoNext: Junio C Hamano
Message 5 of 10 in “[RFC-PATCHv2] submodules: add a background story”
  1. Stefan BellerFeb 9, 2017
  2. Junio C HamanoFeb 9, 2017
  3. Stefan BellerFeb 14, 2017
  4. Junio C HamanoFeb 14, 2017
  5. Stefan BellerFeb 14, 2017
  6. Junio C HamanoFeb 14, 2017
  7. Stefan BellerFeb 14, 2017
  8. Junio C HamanoFeb 14, 2017
  9. Junio C HamanoFeb 14, 2017
  10. Brandon WilliamsFeb 14, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.