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

Re: [PATCH] merge-recursive: use fspathcmp() in path_hashmap_cmp()

From
Jeff King <peff@peff.net>
Date
Sep 13, 2021, 17:09 UTC
Message-ID
<YT+FzPT0RCP2PdNL@coredump.intra.peff.net>
In-Reply-To
<nycvar.QRO.7.76.6.2109131335260.55@tvgsbejvaqbjf.bet>
On Mon, Sep 13, 2021 at 01:37:48PM +0200, Johannes Schindelin wrote:
Show 10 quoted lines
> > Good point.  So fspathcmp() and friends would need a repo parameter. :-|
> 
> Yes, we will eventually have to pass `struct repository *r` into a _lot_
> of call chains. It'll be a disruptive change, yet if the submodule folks
> truly want to aim for in-process recursive treatment of submodules, there
> is no alternative.
> 
> FWIW on Windows there are other potentially repository-specific settings
> that are relevant in similar situations. For example, there is
> `core.symlinks`.

Another approach is to stuff the appropriate globals into the repository struct, and then "push" onto the global the_repository pointer, treating it like a stack. And then low-level code is free to use that global context, even if it wasn't passed in.

That helps the primary use case of "now I need to do something in a sub-module, but I'd like to do it in-process". But it's not without challenges:

  - code which acts at the boundary of a submodule and a superproject
    may be more awkward (since only one of them can be "the current
    repository" at a time).
  - it's a challenge with threading (an obvious problem would be a
    multi-threaded grep which wanted to descend into a submodule). Using
    a thread-local global for the_repository might solve that.

It's possible that this is a terrible direction to go, so I'm not necessarily endorsing it, but just offering it as a possibility to think about. The trickiest thing is that any devil would likely be in the details, and we wouldn't know until proceeding for a while along that path. Whereas passing around a context struct, while verbose and annoying, is a well-understood construct.

-Peff
Previous: Johannes SchindelinNext: Junio C Hamano
Message 12 of 15 in “merge-recursive: use fspathcmp() in path_hashmap_cmp()”
  1. merge-recursive: use fspathcmp() in path_hashmap_cmp()René Scharfe, Aug 28, 2021
  2. Taylor BlauAug 29, 2021
  3. Jeff KingAug 29, 2021
  4. Junio C HamanoAug 30, 2021
  5. René ScharfeAug 30, 2021
  6. Jeff KingAug 30, 2021
  7. Junio C HamanoAug 30, 2021
  8. René ScharfeAug 30, 2021
  9. Jeff KingAug 30, 2021
  10. René ScharfeSep 11, 2021
  11. Johannes SchindelinSep 13, 2021
  12. Jeff KingSep 13, 2021
  13. Junio C HamanoSep 13, 2021
  14. Johannes SchindelinSep 14, 2021
  15. Jeff KingSep 14, 2021

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.