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

Re: [RFC PATCH 0/3] grep: don't add subrepos to in-memory alternates

From
Junio C Hamano <gitster@pobox.com>
Date
Sep 18, 2019, 19:55 UTC
Message-ID
<xmqq36gt5qhr.fsf@gitster-ct.c.googlers.com>
In-Reply-To
<cover.1568771073.git.matheus.bernardino@usp.br>
Matheus Tavares <matheus.bernardino@usp.br> writes:
> Make git-grep --recurse-submodules stop adding subrepos to the in-memory
> alternates list and, instead, pass a reference to the subrepo struct
> down to the threads.

Nice. This is done by updating all the codepaths used by grep to use the lower-level helper functions that can take a repository instance and/or an object store instance that is not the one tied to the top-level repository? Quite nice.

> - textconv cache is written to the_repository's object database even for
>   submodules. Should it perhaps be written to submodules' odb instead?

You mention "is written", but that is what happens upon a cache miss. Before the code notices a cache miss, it must be checking if a cached result is available. In which odb is it done? Writing that follow the miss should happen to the same one, or the cache is not very effective.

Because you would want the cache to be effective, after running "git grep --recurse-submodules" from the top-level, when you chdir down to the submodule and say "git grep" to dig further, the answer to your question is most likely "yes".

Show 8 quoted lines
> - Considering the following call chain: grep_source_load_driver() >
>   userdiff_find_by_path() > git_check_attr() > collect_some_attrs() >
>   prepare_attr_stack() > bootstrap_attr_stack():
>
>   * The last function tries to read the attributes from the
>     .gitattributes and .git/info/attributes files of the_repository.
>     However, for paths inside the submodule, shouldn't it try to read
>     these files from the submodule?

Yes, I think all of those would have worked correctly if we forked a separate "git grep" inside submodule repository, but in the rush to "do everything in process", many things like these are not done correctly. As there is only one attribute cache IIUC, invalidating the whole cache for the top-level and replacing it with the one for a submodule, every time we cross the module boundary, would probably have a negative effect on the performance, and I am not sure what would happen if you run more than one threads working in different repositories (i.e. top-level and submodules).

Show 6 quoted lines
>   * This function will also call: read_attr() > read_attr_from_index() >
>     read_blob_data_from_index() which might, in turn, call
>     read_object_file(). Shouldn't we pass the subrepo to it so that it
>     can call repo_read_object_file()? (Again, for paths inside the
>     submodule, read_object_file() won't be able to find the object as
>     we won't be adding to alternates anymore.)
Ditto.
Thanks.
Previous: Brandon WilliamsNext: Matheus Tavares Bernardino
Message 6 of 11 in “grep: don't add subrepos to in-memory alternates”
  1. 0/3 grep: don't add subrepos to in-memory alternatesMatheus Tavares, Sep 18, 2019
  2. 1/3 diff: use the given repo at diff_populate_filespec()Matheus Tavares, Sep 18, 2019
  3. 2/3 object: allow parse_object_or_die() to handle any repoMatheus Tavares, Sep 18, 2019
  4. 3/3 grep: don't add submodules to the alternates listMatheus Tavares, Sep 18, 2019
  5. Brandon WilliamsSep 21, 2019
  6. Junio C HamanoSep 18, 2019
  7. Matheus Tavares BernardinoSep 19, 2019
  8. Junio C HamanoSep 20, 2019
  9. Matheus Tavares BernardinoSep 21, 2019
  10. Junio C HamanoSep 28, 2019
  11. Matheus Tavares BernardinoSep 28, 2019

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.