On Wed, Mar 28, 2018 at 01:36:56PM -0400, Jeff King wrote: > For those just joining us, this fixes a regression that was in v2.13 (so > nothing we need to worry about as part of the 2.17-rc track). > > [1/4]: set_git_dir: die when setenv() fails > [2/4]: add chdir-notify API > [3/4]: set_work_tree: use chdir_notify > [4/4]: refs: use chdir_notify to update cached relative paths Here's a re-roll based on the feedback I got, including: - fixes the memory leak and vague comment pointed out by Eric - adds in tracing code from Duy - I took Duy's suggestions regarding "least" surprise in some of the functions (reparenting NULL is a noop, and registering a reparent handler does so even for an absolute path). I punted on the "registering the same path twice" thing. That is a potential way to misuse this API, but I don't think there's a good solution. The "reparent" helper could figure this out for you, but in the general case we actually install an arbitrary callback. So the caller really has to handle it there. I think in the long run we'd want to outlaw calling set_git_dir() twice anyway. But possibly the handler-installers should be more careful. I'm dropping poor Rafael from the cc here, since it is turning into quite a lot of messages. :) I think at this point his bug has been duly reported and we are working on the fix. [1/5]: set_git_dir: die when setenv() fails [2/5]: trace.c: export trace_setup_key [3/5]: add chdir-notify API [4/5]: set_work_tree: use chdir_notify [5/5]: refs: use chdir_notify to update cached relative paths Makefile | 1 + cache.h | 2 +- chdir-notify.c | 93 +++++++++++++++++++++++++++++++++++++++++++ chdir-notify.h | 73 +++++++++++++++++++++++++++++++++ environment.c | 26 ++++++++++-- refs/files-backend.c | 6 +++ refs/packed-backend.c | 3 ++ setup.c | 9 ++--- t/t1501-work-tree.sh | 12 ++++++ trace.c | 14 +++---- trace.h | 1 + 11 files changed, 223 insertions(+), 17 deletions(-) create mode 100644 chdir-notify.c create mode 100644 chdir-notify.h -Peff