summaryrefslogtreecommitdiff
path: root/Biz/Ide/post-checkout
diff options
context:
space:
mode:
Diffstat (limited to 'Biz/Ide/post-checkout')
-rwxr-xr-xBiz/Ide/post-checkout28
1 files changed, 28 insertions, 0 deletions
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