Re: [PATCH v1] worktree: set worktree environment in post-checkout hook
- Date: Sun, 11 Feb 2018 22:27:27 -0500
- From: Eric Sunshine <sunshine@xxxxxxxxxxxxxx>
- Subject: Re: [PATCH v1] worktree: set worktree environment in post-checkout hook
On Fri, Feb 9, 2018 at 8:01 PM, <lars.schneider@xxxxxxxxxxxx> wrote:
> In ade546be47 (worktree: invoke post-checkout hook (unless
> --no-checkout), 2017-12-07) we taught Git to run the post-checkout hook
> in worktrees. Unfortunately, the environment of the hook was not made
> aware of the worktree. Consequently, a 'git rev-parse --show-toplevel'
> call in the post-checkout hook would return a wrong result.
> Fix this by setting the 'GIT_WORK_TREE' environment variable to make
> Git calls within the post-checkout hook aware of the worktree.
> Signed-off-by: Lars Schneider <larsxschneider@xxxxxxxxx>
> I think this is a bug in Git 2.16. We noticed it because it caused a
> problem in Git LFS . The modified test case fails with Git 2.16 and
> succeeds with this patch.
Thanks for reporting and diagnosing the problem.
I have some concerns about this patch's fix of setting GIT_WORK_TREE
unconditionally. In particular, such unconditional setting of
GIT_WORK_TREE might cause unforeseen problems. Although the
circumstances may not be quite the same, but the tale told by
86d26f240f (setup.c: re-fix d95138e (setup: set env $GIT_WORK_TREE
when .., 2015-12-20) makes me cautious.
More significantly, though, setting GIT_WORK_TREE seems too
specialized a solution. While it may "fix" Git commands invoked by the
hook, it does nothing for other commands ('cp', 'mv', etc.) which the
hook may employ.
As a review comment, I was going to suggest that you chdir() to the
new worktree directory instead of messing with GIT_WORK_TREE, but when
I tested it myself before making the suggestion, I discovered that the
issue is a bit more involved. The result is that I ended up posting a
patch series to replace this one, with what I believe is a more