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

Re: Minor bug, git ls-files -o aborts because of broken submodules

From
Jeff King <peff@peff.net>
Date
Jan 22, 2016, 21:18 UTC
Message-ID
<20160122211803.GA17071@sigill.intra.peff.net>
In-Reply-To
<CACsJy8BpCc6sNKUs3TsMnA_8dk+uFvZy1T_UmfQMxcm2bpg2uw@mail.gmail.com>
On Fri, Jan 22, 2016 at 04:17:29PM +0700, Duy Nguyen wrote:
Show 21 quoted lines
> $ git init abc
> $ cd abc
> $ mkdir def
> $ echo 'gitdir: blah blah' >def/.git
> $ git ls-files -o
> fatal: Not a git repository: def/blah blah
> 
> If some directory looks like a submodule but turns out not, that's not
> a fatal error. The stack trace is something like this. I suspect
> do_submodule_path should use the gently version..
> 
> #1  0x0000000000588a78 in die
> #2  0x0000000000558ded in read_gitfile_gently
> #3  0x000000000051e2f6 in do_submodule_path
> #4  0x000000000051e484 in git_pathdup_submodule
> #5  0x00000000005340ac in resolve_gitlink_ref_recursive
> #6  0x00000000005342cf in resolve_gitlink_ref
> #7  0x00000000004dd20d in treat_directory
> #8  0x00000000004dd760 in treat_one_path
> #9  0x00000000004dd971 in treat_path
> #10 0x00000000004de038 in read_directory_recursive

I think we'd have to change the semantics going up the stack, as do_submodule_path has no way to report failure.

But I think this is another case of
  http://thread.gmane.org/gmane.comp.version-control.git/265560/focus=281253

There the question was about performance (lots of these clog up the linear ref_cache list), but I think the root cause is the same: going too far into ref resolution without realizing we don't have a real submodule.

Andreas posted some patches, but they didn't make it to the list. Here are my replies, which did:

  http://article.gmane.org/gmane.comp.version-control.git/282028
  http://article.gmane.org/gmane.comp.version-control.git/282029
  http://thread.gmane.org/gmane.comp.version-control.git/282030

However, from going over them, I think there was a problem in the series; we really do need to know the sha1 in some of these cases. So I think maybe the simplest thing would be to catch this case in resolve_gitlink_ref(), before we go deeper. Let me see if I can come up with something.

-Peff
Previous: Duy NguyenNext: Jeff King
Message 2 of 9 in “Minor bug, git ls-files -o aborts because of broken submodules”
  1. Duy NguyenJan 22, 2016
  2. Jeff KingJan 22, 2016
  3. Jeff KingJan 22, 2016
  4. 1/2 clean: make is_git_repository a public functionJeff King, Jan 22, 2016
  5. 2/2 resolve_gitlink_ref: ignore non-repository pathsJeff King, Jan 22, 2016
  6. Jeff KingJan 22, 2016
  7. Stefan BellerJan 22, 2016
  8. Jeff KingJan 22, 2016
  9. Andreas KreyJan 25, 2016

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.