Chris R

This is such an extremely specific complaint

Making git hooks visible in fish shell

I saw Ned Batchelder's post about a zsh function to show git hooks in the current repository, which was in turn inspired by a post by Frank Wiles, detailing a hack that nearly got him, reliant on sketchy git hooks in a shared folder.

I use fish shell, though, not zsh, so here's my version of the same script. I put this in ~/.config/fish/functions/_show_git_hooks.fish:

function _show_git_hooks --on-variable PWD
    set -l git_dir (git rev-parse --git-dir 2>/dev/null)
    if ! test -d "$git_dir/hooks"
        # clear the shown hooks dir, since we have left a repo
        set -e _git_shown_hooks_dir
        return
    end

    set -l hooks_dir_rel "$git_dir/hooks"
    set -l hooks_dir (realpath -- "$hooks_dir_rel")

    # only announce once per repo, since this function is called on every prompt
    if set -q _git_shown_hooks_dir
        if test "$_git_shown_hooks_dir" = "$hooks_dir"
            return
        end
    end

    set -g _git_shown_hooks_dir "$hooks_dir"

    set -l hooks
    for hook in (find "$hooks_dir" -type f | sort)
        if test -x "$hook"; and not string match -q '*.sample' -- "$hook"; and not string match -q '*.disabled' -- "$hook"; and not string match -q '*.txt' -- "$hook"
            set -a hooks "$hook"
        end
    end
    if test (count $hooks) -gt 0
        echo "Git hooks found in $hooks_dir_rel:"
        for hook in $hooks
            echo "  - "(basename $hook)
        end
    end
end

Then, much like in Ned's post, it's necessary to invoke the script on shell intialization, so I've added this to ~/.config/fish/conf.d/git-hooks.fish:

if status is-interactive
    source ~/.config/fish/functions/_show_git_hooks.fish
end

Feedback

You can reply to this post via Mastodon:

Waiting to load comments

Reply to @offby1's post

With an account on the Fediverse or Mastodon, you can respond to this post. Since Mastodon is decentralized, you can use your existing account hosted by another Mastodon server or compatible platform if you don't have an account on this one.

Copy and paste this URL into the search field of your favourite Fediverse app or the web interface of your Mastodon server.