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

Re: git submodules implementation question

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 30, 2016, 17:53 UTC
Message-ID
<xmqqzinu3zyw.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<CAN5XQftCC+TUm2Jx4q3V9oFbXndtFx3H+daoB3TD3eWUs6s54A@mail.gmail.com>
Uma Srinivasan <usrinivasan@twitter.com> writes:
Show 10 quoted lines
> I think the following fix is still needed to is_submodule_modified():
>
>         strbuf_addf(&buf, "%s/.git", path);
>         git_dir = read_gitfile(buf.buf);
>         if (!git_dir) {
>                 git_dir = buf.buf;
>  ==>               if (!is_git_directory(git_dir)) {
>  ==>                     die("Corrupted .git dir in submodule %s", path);
>  ==>               }
>         }

If it is so important that git_dir is a valid Git repository after

	git_dir = read_gitfile(buf.buf);
        if (!git_dir)
        	git_dir = buf.buf;

is done to determine what "git_dir" to use, it seems to me that it does not make much sense to check ONLY dir/.git that is a directory and leave .git/modules/$name that dir/.git file points at unchecked.

But there is much bigger problem with the above addition, I think. There also can be a case where dir/ does not even have ".git" in it. A submodule the user is not interested in will just have an empty directory there, and immediately after the above three lines I reproduced above, we have this

	if (!is_directory(git_dir)) {
        	strbuf_release(&buf);
                return 0;
	}

The added check will break the use case. If anything, that check, if this code needs to verify that "git_dir" points at a valid Git repository, should come _after_ that.

Shouldn't "git-status --porcelain" run in the submodule notice that it is not a valid repository and quickly die anyway? Why should we even check before spawning that process in the first place?

I might suggest to update prepare_submodule_repo_env() so that the spawned process will *NOT* have to guess where the working tree and repository by exporting GIT_DIR (set to "git_dir" we discover above) and GIT_WORK_TREE (set to "." as cp.dir is set to the path to the working tree of the submodule). That would stop the "git status" to guess (and fooled by a corrupted dir/.git that is not a git repository).

Previous: Uma SrinivasanNext: Uma Srinivasan
Message 14 of 31 in “git submodules implementation question”
  1. Uma SrinivasanAug 28, 2016
  2. Junio C HamanoAug 29, 2016
  3. Uma SrinivasanAug 29, 2016
  4. Junio C HamanoAug 29, 2016
  5. Uma SrinivasanAug 29, 2016
  6. Uma SrinivasanAug 29, 2016
  7. Junio C HamanoAug 29, 2016
  8. Uma SrinivasanAug 29, 2016
  9. Jacob KellerAug 30, 2016
  10. Uma SrinivasanAug 30, 2016
  11. Jacob KellerAug 30, 2016
  12. Jacob KellerAug 30, 2016
  13. Uma SrinivasanAug 30, 2016
  14. Junio C HamanoAug 30, 2016
  15. Uma SrinivasanAug 31, 2016
  16. Junio C HamanoAug 31, 2016
  17. Uma SrinivasanAug 31, 2016
  18. Junio C HamanoAug 31, 2016
  19. Uma SrinivasanAug 31, 2016
  20. Uma SrinivasanSep 1, 2016
  21. Junio C HamanoSep 1, 2016
  22. Uma SrinivasanSep 1, 2016
  23. Junio C HamanoSep 1, 2016
  24. Stefan BellerSep 1, 2016
  25. Junio C HamanoSep 1, 2016
  26. Junio C HamanoSep 1, 2016
  27. Junio C HamanoSep 1, 2016
  28. Stefan BellerSep 1, 2016
  29. Junio C HamanoSep 1, 2016
  30. Uma SrinivasanSep 1, 2016
  31. Junio C HamanoSep 1, 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.