On Wed, Mar 28, 2018 at 7:36 PM, Jeff King <peff@xxxxxxxx> wrote: > On Wed, Mar 28, 2018 at 12:10:21PM +0200, Duy Nguyen wrote: > >> > I think it might be clearer if a single call is given both the old and >> > new paths. That requires the caller of chdir() storing getcwd() before >> > it moves, but I don't think that should be a big deal. >> >> 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 ;-) 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. I will probably rework on top of your chdir-notify instead (and let yours to be merged earlier) Note, this one is built on a strange base, which is a merge of 'next' and 'sb/object-store' (I needed 'next' and Junio would have another evil merge if 'sb/object-store' was not in the base). Nguyễn Thái Ngọc Duy (8): strbuf.c: add strbuf_ensure_trailing_dr_sep() strbuf.c: reintroduce get_pwd_cwd() (with strbuf_ prefix) trace.c: export trace_setup_key setup.c: introduce setup_adjust_path() setup.c: allow other code to be notified when $CWD moves environment.c: adjust env containing relpath when $CWD is moved repository: adjust repo paths when $CWD moves refs: adjust main repo paths when $CWD moves abspath.c | 4 +-- builtin/difftool.c | 6 ++--- cache.h | 8 ++++++ dir-iterator.c | 3 +-- environment.c | 46 +++++++++++++++++++++++++++++++++ object-store.h | 3 +++ object.c | 15 +++++++++++ path.c | 9 +++---- refs.c | 10 ++++++++ refs/files-backend.c | 15 +++++++++++ refs/packed-backend.c | 12 +++++++++ refs/refs-internal.h | 4 +++ repository.c | 28 ++++++++++++++++++++ setup.c | 59 ++++++++++++++++++++++++++++++++++--------- strbuf.c | 43 ++++++++++++++++++++----------- strbuf.h | 8 ++++++ trace.c | 14 +++++----- trace.h | 1 + 18 files changed, 239 insertions(+), 49 deletions(-) -- 2.17.0.rc1.439.gca064e2955