git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/1] respect core.hooksPath, falling back to .git/hooks

From
Pratyush Yadav <me@yadavpratyush.com>
Date
Sep 27, 2019, 13:05 UTC
Message-ID
<20190927130539.52oir56byuedqmm3@yadavpratyush.com>
In-Reply-To
<CAKPyHN1P713bTb2TYXFuXcM5Dg=7vXBVgchwvJUrNsQ6EcP5Rg@mail.gmail.com>
On 27/09/19 08:10AM, Bert Wesarg wrote:
Show 50 quoted lines
> On Fri, Sep 27, 2019 at 12:40 AM Pratyush Yadav <me@yadavpratyush.com> wrote:
> >
> > Hi,
> >
> > On 26/09/19 02:17PM, Johannes Schindelin via GitGitGadget wrote:
> > > From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
> > >
> > > Since v2.9.0, Git knows about the config variable core.hookspath
> > > that allows overriding the path to the directory containing the
> > > Git hooks.
> > >
> > > Since v2.10.0, the `--git-path` option respects that config
> > > variable, too, so we may just as well use that command.
> > >
> > > For Git versions older than v2.5.0 (which was the first version to
> > > support the `--git-path` option for the `rev-parse` command), we
> > > simply fall back to the previous code.
> > >
> > > This fixes https://github.com/git-for-windows/git/issues/1755
> > >
> > > Initial-patch-by: Philipp Gortan <philipp@gortan.org>
> > > Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> > > ---
> > >  git-gui.sh | 6 +++++-
> > >  1 file changed, 5 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/git-gui.sh b/git-gui.sh
> > > index fd476b6999..b2c6e7a1db 100755
> > > --- a/git-gui.sh
> > > +++ b/git-gui.sh
> > > @@ -623,7 +623,11 @@ proc git_write {args} {
> > >  }
> > >
> > >  proc githook_read {hook_name args} {
> > > -     set pchook [gitdir hooks $hook_name]
> > > +     if {[package vcompare $::_git_version 2.5.0] >= 0} {
> > > +             set pchook [git rev-parse --git-path "hooks/$hook_name"]
> > > +     } else {
> > > +             set pchook [gitdir hooks $hook_name]
> > > +     }
> >
> > gitdir is used in a lot of places, and I think all those would also
> > benefit from using --git-path. So I think it is a better idea to move
> > this to the procedure gitdir. It would have to be refactored to take any
> > number of arguments, instead of the two it takes here.
> 
> gitdir already takes an arbitrary number of arguments and joins them
> to a path. The more imminent challenge is, that gitdir caches the
> GIT_DIR, thus it tries to avoid calling "git rev-parse". Which works
> for most, but not for hooks.
What I was thinking of was something like this:
  - If no args are passed, then just directly return $_gitdir. This is 
    already being done. I assume the GIT_DIR relocation is already 
    handled by `git rev-parse --git-dir`, so this would point to the 
    correct location.
  - If args are passed, then we want a subdirectory of GIT_DIR In this 
    case, it is possible that this subdirectory has also been relocated 
    (hooks/ being one of those subdirectories). So in this case, use 
    `git rev-parse --git-path` instead.
So the gitdir procedure would look something like:
  proc gitdir {args} {
  	global $_gitdir
  	if {$args eq {}} {
  		# Return the cached GIT_DIR
  		return $_gitdir
  	}
  
  	# Use `git rev-parse --git-path` to get the path instead of 
  	# using the cached value.
  }
Am I missing something? Or does this fix the issue you describe?
 
Show 5 quoted lines
> We could either maintain a blacklist, for what we cache the result
> too, or always call "git rev-parse --git-dir".
> 
> This blacklist would need to be in sync with the one in Git's
> path.c::adjust_git_path() than.

Is caching GIT_DIR that important in terms of performance? Otherwise, I'd say calling `git rev-parse --git-path` for _every_ subdirectory of GIT_DIR is a much simpler solution.

-- 
Regards,
Pratyush Yadav
Previous: Bert WesargNext: Johannes Schindelin
Message 5 of 24 in “git-gui: respect core.hooksPath, falling back to .git/hooks”
  1. 0/1 git-gui: respect core.hooksPath, falling back to .git/hooksJohannes Schindelin via GitGitGadget, Sep 26, 2019
  2. 1/1 respect core.hooksPath, falling back to .git/hooksJohannes Schindelin via GitGitGadget, Sep 26, 2019
  3. Pratyush YadavSep 26, 2019
  4. Bert WesargSep 27, 2019
  5. Pratyush YadavSep 27, 2019
  6. Johannes SchindelinSep 30, 2019
  7. Pratyush YadavOct 1, 2019
  8. Johannes SchindelinOct 1, 2019
  9. Pratyush YadavOct 4, 2019
  10. Johannes SchindelinOct 4, 2019
  11. 0/1 git-gui: respect core.hooksPath, falling back to .git/hooksJohannes Schindelin via GitGitGadget, Sep 30, 2019
  12. 1/1 respect core.hooksPath, falling back to .git/hooksJohannes Schindelin via GitGitGadget, Sep 30, 2019
  13. 0/1 git-gui: respect core.hooksPath, falling back to .git/hooksJohannes Schindelin via GitGitGadget, Oct 4, 2019
  14. 1/1 Fix gitdir e.g. to respect core.hooksPathJohannes Schindelin via GitGitGadget, Oct 4, 2019
  15. Pratyush YadavOct 8, 2019
  16. Johannes SchindelinOct 8, 2019
  17. 0/1 git-gui: respect core.hooksPath, falling back to .git/hooksJohannes Schindelin via GitGitGadget, Oct 8, 2019
  18. 1/1 Make gitdir work with worktrees, respect core.hooksPath, etcJohannes Schindelin via GitGitGadget, Oct 8, 2019
  19. Pratyush YadavOct 11, 2019
  20. Johannes SchindelinOct 12, 2019
  21. Pratyush YadavOct 13, 2019
  22. Johannes SchindelinOct 13, 2019
  23. Pratyush YadavOct 17, 2019
  24. Johannes SchindelinOct 14, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.