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

Re: git-gui ignores core.hooksPath

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Jun 14, 2017, 13:15 UTC
Message-ID
<alpine.DEB.2.21.1.1706141457500.171564@virtualbox>
In-Reply-To
<CACBZZX6H4wxQ7hrO1Y1u6Qyr5gpK9GeCxpv-x2q3Eq2WCbkK8Q@mail.gmail.com>
Hi,
On Fri, 2 Jun 2017, Ævar Arnfjörð Bjarmason wrote:
Show 16 quoted lines
> On Fri, Jun 2, 2017 at 3:41 PM, Philipp Gortan <philipp@gortan.org> wrote:
>
> > I've been unhappy for quite a while that I had to configure the hooks
> > manually for each of my repos - until I found out recently that there
> > is the core.hooksPath config variable that (when set globally) allows
> > me to specify a hooks directory to be used for all my repositories.
> >
> > Now I was happy - for a few minutes, until I tested this feature in
> > git-gui, and realized that it doesn't work there.
> >
> > This seems to be caused by "proc githook_read", which says "set pchook
> > [gitdir hooks $hook_name]" instead of querying "git config
> > core.hooksPath" first - cf
> > https://github.com/git/git/blob/2cc2e70264e0fcba04f9ef791d144bbc8b501206/git-gui/git-gui.sh#L627
> >
> > Would be great if this could get fixed...
Indeed. Why don't you give it a try?
Show 5 quoted lines
> This indeed is something that should be fixed, but git-gui development
> is managed outside of git.git, it's just occasionally pulled in. I'm
> not what the best place to contact is, but I've CC'd
> Philip Oakley who's been making recent commits to git-gui.git at
> http://repo.or.cz/git-gui.git/

Philip is in the same spot as I am: we both worked on Git GUI to improve it for Git for Windows users, but Pat has been silent for over half a year on all of our PRs.

In the meantime, I managed to get a couple of changes into git.git via Junio, but the situation is far from ideal.

So what I settled on is to carry a couple of Git GUI patches in Git for Windows' fork, until the time when the patches finally get accepted into https://github.com/patthoyts/git-gui.

In this particular instance, the only question is whether to use `git rev-parse --git-path hooks` or re-roll the core.hookspath logic in git-gui.

Both approaches have their downsides:
- rev-parse --git-path was broken in subdirectories for a *really* long
  time. Since Git GUI is supposed to be relatively independent from the
  version of the installed git executable, that would imply a couple of
  ugly extra code just to make sure that it works correctly.
- duplicating the core.hookspath logic is prone to become stale over time,
  as Git may change the behavior (as it did with the core.hookspath
  setting).

The subdirectory problem of --git-path is actually not that bad, as Git GUI cd's to the top-level directory anyway. So that bug does not affect us. The only caveat is that --git-path was only introduced into v2.5.0, and Git GUI has conditional code to even support pre-1.6.3 versions.

Happily, pre-1.6.3 versions are not supposed to handle core.hookspath in the way v2.9.0 and later handle it.

So something like this *may* work:
-- snip --
diff --git a/git-gui/git-gui.sh b/git-gui/git-gui.sh
index 37c1c5d227b..3067a3b000a 100755
--- a/git-gui/git-gui.sh
+++ b/git-gui/git-gui.sh
@@ -624,7 +624,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]
+	}
 	lappend args 2>@1
 
 	# On Windows [file executable] might lie so we need to ask
-- snap --

Philipp, this is as far as I will go with this. If you truly desire this
to be fixed, please take it from here (read: test, fix and submit with a
good commit message).

Ciao,
Johannes
Previous: Philipp GortanNext: Philipp Gortan
Message 9 of 20 in “git-gui ignores core.hooksPath”
  1. Philipp GortanJun 2, 2017
  2. Samuel LijinJun 2, 2017
  3. Ævar Arnfjörð BjarmasonJun 2, 2017
  4. respect core.hooksPath, falling back to .git/hooksPhilipp Gortan, Jun 2, 2017
  5. Philipp GortanJun 2, 2017
  6. Johannes SchindelinJun 14, 2017
  7. Philip OakleyJun 2, 2017
  8. Philipp GortanJun 2, 2017
  9. Johannes SchindelinJun 14, 2017
  10. Philipp GortanJun 14, 2017
  11. Chris MaesApr 10, 2018
  12. Johannes SchindelinApr 10, 2018
  13. Junio C HamanoApr 10, 2018
  14. Ævar Arnfjörð BjarmasonApr 10, 2018
  15. Junio C HamanoApr 11, 2018
  16. Bert WesargJun 5, 2018
  17. Stefan BellerJun 11, 2018
  18. Johannes SixtJun 12, 2018
  19. Johannes SchindelinJul 10, 2018
  20. Philip OakleyJul 10, 2018

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.