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

Re: sudmodule.<name>.recurse ignored

From
MTMichael S. Tsirkin <mst@redhat.com>
Date
Oct 12, 2022, 21:49 UTC
Message-ID
<20221012174742-mutt-send-email-mst@kernel.org>
In-Reply-To
<kl6lfsft0ylu.fsf@chooglen-macbookpro.roam.corp.google.com>
On Wed, Oct 12, 2022 at 09:56:45AM -0700, Glen Choo wrote:
Show 47 quoted lines
> "Michael S. Tsirkin" <mst@redhat.com> writes:
> 
> > Fundamentally the problem we encounter regularly is this:
> > 	qemu is superproject, ui/keycodemapdb is subproject.
> >
> >
> > 	I have a change on master setting the submodule commit:
> >
> > 	qemu$ git show master | grep +Sub
> > 	+Subproject commit 7381b9bfadd31c4c9e9a10b5bb5032f9189d4352
> >
> > 	and check it out:
> >
> > 	qemu$ git submodule update --init ui/keycodemapdb
> > 	Submodule 'ui/keycodemapdb' (https://gitlab.com/qemu-project/keycodemapdb.git) registered for path 'ui/keycodemapdb'
> > 	Submodule path 'ui/keycodemapdb': checked out '7381b9bfadd31c4c9e9a10b5bb5032f9189d4352'
> >
> >
> > 	In another branch I have a different commit:
> >
> > 	qemu$ git show sub-foo  | grep +Sub
> > 	+Subproject commit 57ba70da5312170883a3d622cd2aa3fd0e2ec7ae
> >
> >
> > 	Now I switch branches and nothing happens, the submodule
> > 	is marked as dirty:
> >
> > 	qemu$ git checkout sub-foo
> > 	M       ui/keycodemapdb
> > 	Switched to branch 'sub-foo'
> >
> > 	qemu$ (cd ui/keycodemapdb && git show | head -1)
> > 	commit 7381b9bfadd31c4c9e9a10b5bb5032f9189d4352
> >
> >
> > it is now very easy to generate incorrect code:
> > - git commit -a  will commit the change to submodule
> > - any build will use a mix of super and subproject that
> >   is completely untested
> >
> >
> > As a result people are basically saying avoid using submodules
> > but I am wondering whether git can be tweaked to do the
> > right thing by default.
> >
> 
> It sounds like you want submodule.recurse [1] :)

yes. unfortuntely there is no way to set it by default for cloned repos. users have to remember to set it.

Show 23 quoted lines
> With that enabled, your
> "git checkout" should behave like "git checkout --recurse-submodules",
> which should make ui/keycodemapdb check out the correct commit as long
> as the submodule commit is present locally. If is is _not_ present
> locally, you will have to run "git submodule update".
> 
> Unfortunately, you typically won't know whether the commit is present
> before running the command. This is yet another of those things that are
> painful with submodules.
> 
> [1] https://git-scm.com/docs/git-config#Documentation/git-config.txt-submodulerecurse
> 
> > I understand we can work around it by asking everyone to
> > create a correct config, but can't we make it DTRT by default
> > to reduce friction?
> 
> You might be interested in the proposed 'new' Submodule UX [2]; one of
> the goals is to make manual submodule management via "git submodule"
> unnecessary.
> 
> As a part of that, you should be able to set "submodule.recurse = true"
> and have high confidence that all necessary submodules and submodule
> commits are present.
Hmm. How about only doing this for active submodules? Possible?
Show 10 quoted lines
> Work on that is still ongoing, but this situation
> should have improved as of [3].
> 
> [2] https://lore.kernel.org/git/YHofmWcIAidkvJiD@google.com/
> [3] https://lore.kernel.org/git/20220308001433.94995-1-chooglen@google.com/
> 
> >
> >
> > -- 
> > MST
Previous: Glen Choo
Message 8 of 8 in “sudmodule.<name>.recurse ignored”
  1. Michael S. TsirkinOct 7, 2022
  2. Ævar Arnfjörð BjarmasonOct 7, 2022
  3. Michael S. TsirkinOct 7, 2022
  4. Glen ChooOct 7, 2022
  5. Junio C HamanoOct 7, 2022
  6. Michael S. TsirkinOct 11, 2022
  7. Glen ChooOct 12, 2022
  8. Michael S. TsirkinOct 12, 2022

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.