Re: [PATCH 0/8] Re: git complains packed-refs is not a directory when used with GIT_DIR and GIT_WORK_TREE envvars.
From: Jeff King <hidden>
Date: 2018-03-28 18:19:38
On Wed, Mar 28, 2018 at 07:55:29PM +0200, Nguyễn Thái Ngọc Duy wrote:
quoted
quoted
The problem is switching relative paths relies on the old $CWD if I'm not mistaken and we need getcwd() for this. I'd love to have one callback that says "$CWD has been switched from this path to that path, do whatever you need to" that can be called any time, before or after chdir(). I'll look more into it.I think it should be OK to save getcwd() and just construct the original path after the fact. Here's some patches which do that in a nice way.Heh.. I should have checked mails more often while coding ;-)
I was worried about that. I started this earlier as a "well, I could probably just knock this out quickly" task. Many hours later, I found there were quite a few subtleties. :)
This is what I got, which is slightly different from your series because I want to call set_git_dir() just one time (by setup_git_directory) and never again. I think the API looks close enough.
Yeah, I actually think after this series we could enforce that set_git_dir() is never called twice. I think we could even make sure that repo_set_gitdir() is never called twice, too, but it would involve a little more surgery (we'd have to teach it to set up a child_notify handler, and the way it interacts with the set_git_dir() one is subtle. I did try it and it worked, but I went with what you saw in patch 3 because it was simpler).
I will probably rework on top of your chdir-notify instead (and let yours to be merged earlier)
Thanks. I like some of the related changes you made, like including this in the tracing output. That should be easy to do on top of mine, I think. I didn't look for other spots that might need similar treatment (like the object-store bits). -Peff