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

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

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Sep 14, 2021, 10:18 UTC
Message-ID
<nycvar.QRO.7.76.6.2109141215140.55@tvgsbejvaqbjf.bet>
In-Reply-To
<YT+FzPT0RCP2PdNL@coredump.intra.peff.net>
Hi Peff,
On Mon, 13 Sep 2021, Jeff King wrote:
Show 36 quoted lines
> On Mon, Sep 13, 2021 at 01:37:48PM +0200, Johannes Schindelin wrote:
>
> > > 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.

I would not so far as to call it a terrible direction. It is definitely worth a thought or two.

At the end of the day, I fear that it is too tricky in practice, though.

Seeing as there seems to be some appetite for refactoring Git's code on this list, I am thinking that the `struct repository *r` direction might be the one to go for. And I mean like "move the globals into that struct" as opposed to introducing that stack you talked about. It would even be a refactoring where I would understand the motivation, and agree with it, too.

Ciao, Dscho

Previous: Junio C HamanoNext: Jeff King
Message 14 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.