On Wed, Nov 24 2021, Elijah Newren wrote: > On Wed, Nov 24, 2021 at 6:18 AM Ævar Arnfjörð Bjarmason > <avarab@xxxxxxxxx> wrote: >> >> I fleshened this out a bit in this WIP change: >> https://github.com/avar/git/tree/avar/setup-handle-gone-directory + >> commit: >> https://github.com/avar/git/commit/97968518909eef88edba44973b7885d154b7a273 > > Sweet! > >> As noted there there's some caveats, but so far nothing I spotted that >> can't be overcome. It's particularly painful to test it because of an >> implementation detail of our test suite, the bin-wrappers are >> shellscripts, and the very first thing they do is reset $PWD (none of >> which happens if you run the real "git" binary). >> >> That's b.t.w. the "shell-init" error you noted in >> https://lore.kernel.org/git/CABPp-BEp3OL7F2J_LzqtC-x-8pBUPO8ZR1fTx_6XbqZeOH1kRw@xxxxxxxxxxxxxx/, >> it's from the bin-wrapper. > > To be a bit more precise, the error/warning is from bash rather than > the bin-wrappers specifically; for example, you can also trigger the > same shell-init message with a simple `bash -c 'echo hello'` when your > cwd has been deleted. *nod* >> I really wish we didn't have the bin-wrappers... > > I'm curious: is this issue the only reason, or am I reading between > the lines correctly that you have additional reasons for that? I think it sucks in general :) This is a much bigger change than what's needed for this topic or the proposed setup.c change I've got, but what we should be doing in general with bin-wrapper is to not have them at all under RUNTIME_PREFIX=Y (which we can make the default), and simply have a built/ directory or something, the structure of that directory will then 1=1 map to all the relative paths you'd get if you did a "make install". Currently in a built checkout you can do: ./git version But not: # need to add --exec-path=$PWD ./git clone <http url> Or: ./git send-email ... Which all comes down to sillyness in how we try to discover these paths, the *.mo files etc., there's also Perl-specific caveats in there. We'd still need something like a shellscript wrapper for the case of GIT_DEBUGGER, but we could just move that to being a compile-time flag, i.e. we'd swap out the "git" binary for a shellscript that chain-loaded to the "real" binary. It probably matters a bit for e.g. test suite performance, currently we spawn an extra shell for every single "git" invocation, but I mostly care about it for correctness, e.g. in this case of $PWD munging, and being able to have running a built binary from a checkout Just Work without the wrapper.