diff options
author | Ben Sima <ben@bsima.me> | 2020-12-28 22:23:52 -0500 |
---|---|---|
committer | Ben Sima <ben@bsima.me> | 2020-12-28 22:33:10 -0500 |
commit | ba9e18d213f7aaf47fa57ccc4d139bc5cfe03d31 (patch) | |
tree | 2f90df7b3be6cd7703d7af33856a5b71fb369b3d /Biz | |
parent | 9824011e9dfeb46914c60f07ee3634fa9e54ec03 (diff) |
ide: incremental tags and git hooks
Diffstat (limited to 'Biz')
-rw-r--r-- | Biz/Bild/ShellHook.sh | 6 | ||||
-rwxr-xr-x | Biz/Ide/ftags.sh | 23 | ||||
-rwxr-xr-x | Biz/Ide/init_tags.sh | 13 | ||||
-rwxr-xr-x | Biz/Ide/post-checkout | 28 | ||||
-rwxr-xr-x | Biz/Ide/post-merge | 2 |
5 files changed, 58 insertions, 14 deletions
diff --git a/Biz/Bild/ShellHook.sh b/Biz/Bild/ShellHook.sh index 7724c28..9e629f3 100644 --- a/Biz/Bild/ShellHook.sh +++ b/Biz/Bild/ShellHook.sh @@ -18,6 +18,12 @@ alias runghc="runghc --ghc-arg=-i$BIZ_ROOT" alias tree="tree -I _" +# link git hooks +rm -f $BIZ_ROOT/.git/hooks/{post-checkout,post-merge,pre-commit} +ln -s $BIZ_ROOT/Biz/Ide/post-checkout $BIZ_ROOT/.git/hooks/post-checkout +ln -s $BIZ_ROOT/Biz/Ide/post-merge $BIZ_ROOT/.git/hooks/post-merge +ln -s $BIZ_ROOT/Biz/Lint.py $BIZ_ROOT/.git/hooks/pre-commit + function bild() { runghc Biz.Bild $@ } diff --git a/Biz/Ide/ftags.sh b/Biz/Ide/ftags.sh index daa4ca0..2687e9a 100755 --- a/Biz/Ide/ftags.sh +++ b/Biz/Ide/ftags.sh @@ -2,17 +2,12 @@ # ftags - search ctags set -euo pipefail tags=$BIZ_ROOT/tags -if [[ ! -e $tags ]] -then - fast-tags -R $BIZ_ROOT -else - line=$( - awk 'BEGIN { FS="\t" } !/^!/ {print toupper($4)"\t"$1"\t"$2"\t"$3}' $tags \ - | cut -c1-80 \ - | fzf --nth=1,2 - ) - ${EDITOR:-vim} \ - $(cut -f3 <<< "$line") \ - -c "set nocst" \ - -c "silent tag $(cut -f2 <<< "$line")" -fi +tag_search=$( + awk 'BEGIN { FS="\t" } !/^!/ {print toupper($4)"\t"$1"\t"$2"\t"$3}' $tags \ + | cut -c1-80 \ + | fzf --nth=1,2 +) +${EDITOR:-vim} \ + $(cut -f3 <<< "$tag_search") \ + -c "set nocst" \ + -c "silent tag $(cut -f2 <<< "$tag_search")" diff --git a/Biz/Ide/init_tags.sh b/Biz/Ide/init_tags.sh new file mode 100755 index 0000000..10e9c85 --- /dev/null +++ b/Biz/Ide/init_tags.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +# fast-tags wrapper to generate tags automatically if there are none. + +flags=( + --fully-qualified +) +fns=$@ +if [[ ! -r tags ]]; then + echo Generating tags from scratch... + exec fast-tags $flags -R . +else + exec fast-tags $flags $fns +fi diff --git a/Biz/Ide/post-checkout b/Biz/Ide/post-checkout new file mode 100755 index 0000000..5474b5a --- /dev/null +++ b/Biz/Ide/post-checkout @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +set -eu + +# Path to wherever you put this. +init_tags=$BIZ_ROOT/Biz/Ide/init_tags.sh + +old=$1 +new=$2 +# is_branch=$2 # 1 if branch, 2 if file + +# filter out only the changed files +changed=($(git diff --name-only $old $new)) + +if [[ ! -r tags ]] +then + $init_tags +elif [[ ${#changed} -gt 0 ]] +then + grep -v -F --regexp=${^changed} $BIZ_ROOT/tags > $BIZ_ROOT/tags.tmp + mv tags.tmp tags + + # Retag all hs files except the ones that were deleted. + modified=($(git diff --name-only --diff-filter=d $old $new)) + # Filter *.hs, since grep returns non-zero for no matches. + modified=(${(M)modified:#*.hs}) + echo "modified: $modified" + $init_tags $modified +fi diff --git a/Biz/Ide/post-merge b/Biz/Ide/post-merge new file mode 100755 index 0000000..624e797 --- /dev/null +++ b/Biz/Ide/post-merge @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +exec $BIZ_ROOT/Biz/Ide/post-checkout 'HEAD@{1}' HEAD |