Re: [PATCH v2 03/10] submodule: add gitdir path config override

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

 



On Tue, 09 Sep 2025, Patrick Steinhardt <ps@xxxxxx> wrote:
On Mon, Sep 08, 2025 at 05:01:10PM +0300, Adrian Ratiu wrote:
This adds an ability to override gitdir paths via config files (not .gitmodules), such that any encoding scheme can be changed and JGit & co don't need to exactly match the default encoding. A new test and a helper are added. The helper will be used by further tests exercising gitdir paths & encodings.

Aha, so you already do what I'm lamenting about in the preceding commit.

Not quite. I tried to explain in my previous reply that this only looks similar and perhaps I should have worded the commit message differently (I promised Phillip I'll reword it), however it's intended just to allow simple overrides, without being a unified way for all implementations to work with gitdirs. :)

It still raises the question around how to handle this whole migration now, as alternative implementations don't yet know about this specific config key. Doing all of this in a single patch series will most likely result in breakage. In theory, we should probably first introduce the configuration, then wait a couple releases for alternative implementations to catch up, and then switch over. But we still cannot be sure that implementations know to handle this key alright.

Exactly, they won't. :)


A heavy-handed solution to this would be to introduce a repository extension. This would ensure that any well-behaved Git client will refuse to open the repository if it doesn't know about that specific extension. With the remaining ones we can be sure that they know to handle the "submodule.*.gitdir" configuration.

As mentioned, extensions are rather heavy-handed. Furthermore, this whole infra is only really needed under very specific circumstances. So maybe it could be a viable approach to make this extension opt-in: - We provide a new configuration "init.useSubmoduleGitdirExtension" that tells git-init(1) and git-clone(1) to use the new extension for newly initialized repositories. - We detect the situation where a submodule cannot be cloned due to a path conflict. If detected, we print a user-facing hint that tells them to enable the extension.

This is actually a very good idea, to detect path conflicts and print a nice message to instruct the user to enable the extension, instead of the default "error: git dir is inside git dir" or somesuch confusing msg.

I'll work on it for patch v3 and add some tests.


Once the user enabled the extension we'll know to use new, encoded submodule paths from thereon and thus re-initializing the conflicting submodule should work now. With all of this I wonder whether we even need a new ".git/submodules" directory. Couldn't we just continue to create submodules in the old path and for example create a random suffix as required?

Now that we decided to put this logic behind an extension, we might get away with having a unified directory, yes. It's something I'll explore for v3. I would really like to avoid having both "modules" and "submodules" alongside eachother.


In any case, please stop me if I'm going overboard with my backwards compatibility concerns :)

You have good ideas and your feedback is much appreciated. Kudos and
thanks!




[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]

  Powered by Linux