summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Sima <ben@bsima.me>2024-04-01 16:35:15 -0400
committerBen Sima <ben@bsima.me>2024-04-01 16:35:15 -0400
commit99e114f5c598ce6321c81bbe41e212877a3c375c (patch)
tree07b2ac7c96c0970291bce7691aa58054bd1f965a
parent4c7327d144a1e1fd2bd2cfa6a9c49b838674bdd8 (diff)
Make bild exception for git hooks
Apparently git hooks don't get called if they have a file extention, so these weren't getting called at all since commit 904de577261e7024373e7a42fd763184764238f9. So this renames them back to the extension-less versions, and adds an exception in bild for files in the core.hooksPath directory. Unfortunately this means Lint.hs will silently ignore these files, but I guess that's okay for now.
-rw-r--r--Biz/Bild.hs30
-rwxr-xr-xBiz/Ide/hooks/commit-msg (renamed from Biz/Ide/hooks/commit-msg.sh)0
-rwxr-xr-xBiz/Ide/hooks/post-applypatch (renamed from Biz/Ide/hooks/post-applypatch.sh)0
-rwxr-xr-xBiz/Ide/hooks/post-checkout (renamed from Biz/Ide/hooks/post-checkout.sh)0
-rwxr-xr-xBiz/Ide/hooks/post-commit (renamed from Biz/Ide/hooks/post-commit.sh)0
-rwxr-xr-xBiz/Ide/hooks/post-merge (renamed from Biz/Ide/hooks/post-merge.sh)0
-rwxr-xr-xBiz/Ide/hooks/post-rewrite (renamed from Biz/Ide/hooks/post-rewrite.sh)0
-rwxr-xr-xBiz/Ide/hooks/pre-auto-gc (renamed from Biz/Ide/hooks/pre-auto-gc.sh)0
-rwxr-xr-xBiz/Ide/hooks/pre-commit (renamed from Biz/Ide/hooks/pre-commit.sh)2
-rwxr-xr-xBiz/Ide/hooks/pre-push (renamed from Biz/Ide/hooks/pre-push.sh)0
-rwxr-xr-xBiz/Ide/hooks/reference-transaction (renamed from Biz/Ide/hooks/reference-transaction.sh)0
11 files changed, 28 insertions, 4 deletions
diff --git a/Biz/Bild.hs b/Biz/Bild.hs
index 15f2700..15d9619 100644
--- a/Biz/Bild.hs
+++ b/Biz/Bild.hs
@@ -160,7 +160,8 @@ main = Cli.Plan help move test_ pure |> Cli.main
"Biz.Bild"
[ test_bildBild,
test_bildExamples,
- test_isGitIgnored
+ test_isGitIgnored,
+ test_isGitHook
]
test_bildBild :: Test.Tree
@@ -201,6 +202,7 @@ move args =
Cli.getAllArgs args (Cli.argument "target")
|> filterM Dir.doesFileExist
+> filterM (\x -> isGitIgnored x /> don't)
+ +> filterM (\x -> isGitHook root x /> don't)
+> traverse Dir.makeAbsolute
+> traverse (namespaceFromPathOrDie root)
+> foldM analyze mempty
@@ -275,6 +277,27 @@ test_isGitIgnored =
+> (@=? [False, True])
]
+isGitHook :: FilePath -> FilePath -> IO Bool
+isGitHook root path =
+ Process.readProcess "git" ["config", "--local", "core.hooksPath"] ""
+ /> strip
+ /> stripRoot root
+ /> flip List.isInfixOf path
+
+test_isGitHook :: Test.Tree
+test_isGitHook =
+ Test.group
+ "isGitHook"
+ [ Test.unit "filters pre-commit hook" <| do
+ root <- Env.getEnv "CODEROOT"
+ res <- isGitHook root <| root <> "/Biz/Ide/hooks/pre-commit"
+ res @=? True,
+ Test.unit "doesn't filter non-hooks" <| do
+ root <- Env.getEnv "CODEROOT"
+ res <- isGitHook root <| root <> "/Biz/Bild.hs"
+ res @=? False
+ ]
+
namespaceFromPathOrDie :: FilePath -> FilePath -> IO Namespace
namespaceFromPathOrDie root path =
Namespace.fromPath root path |> \case
@@ -765,8 +788,6 @@ detectHaskellImports hmap contentLines =
(pkgs <> deps, map (stripRoot root) files |> Set.fromList)
|> pure
where
- stripRoot :: FilePath -> FilePath -> QualifiedPath
- stripRoot root f = fromMaybe f (List.stripPrefix (root <> "/") f)
filepaths :: [String] -> IO [FilePath]
filepaths imports =
imports
@@ -791,6 +812,9 @@ detectHaskellImports hmap contentLines =
onlyHaskell :: Analysis -> Analysis
onlyHaskell = Map.filterWithKey (\ns _ -> ext ns == Namespace.Hs)
+stripRoot :: FilePath -> FilePath -> FilePath
+stripRoot root f = fromMaybe f (List.stripPrefix (root <> "/") f)
+
detectLispImports :: [Text] -> IO (Set Meta.Dep)
detectLispImports contentLines =
contentLines
diff --git a/Biz/Ide/hooks/commit-msg.sh b/Biz/Ide/hooks/commit-msg
index 64e400d..64e400d 100755
--- a/Biz/Ide/hooks/commit-msg.sh
+++ b/Biz/Ide/hooks/commit-msg
diff --git a/Biz/Ide/hooks/post-applypatch.sh b/Biz/Ide/hooks/post-applypatch
index 5071dc5..5071dc5 100755
--- a/Biz/Ide/hooks/post-applypatch.sh
+++ b/Biz/Ide/hooks/post-applypatch
diff --git a/Biz/Ide/hooks/post-checkout.sh b/Biz/Ide/hooks/post-checkout
index e4a0d67..e4a0d67 100755
--- a/Biz/Ide/hooks/post-checkout.sh
+++ b/Biz/Ide/hooks/post-checkout
diff --git a/Biz/Ide/hooks/post-commit.sh b/Biz/Ide/hooks/post-commit
index cd1f195..cd1f195 100755
--- a/Biz/Ide/hooks/post-commit.sh
+++ b/Biz/Ide/hooks/post-commit
diff --git a/Biz/Ide/hooks/post-merge.sh b/Biz/Ide/hooks/post-merge
index d2cfa63..d2cfa63 100755
--- a/Biz/Ide/hooks/post-merge.sh
+++ b/Biz/Ide/hooks/post-merge
diff --git a/Biz/Ide/hooks/post-rewrite.sh b/Biz/Ide/hooks/post-rewrite
index 8b3237a..8b3237a 100755
--- a/Biz/Ide/hooks/post-rewrite.sh
+++ b/Biz/Ide/hooks/post-rewrite
diff --git a/Biz/Ide/hooks/pre-auto-gc.sh b/Biz/Ide/hooks/pre-auto-gc
index c92a844..c92a844 100755
--- a/Biz/Ide/hooks/pre-auto-gc.sh
+++ b/Biz/Ide/hooks/pre-auto-gc
diff --git a/Biz/Ide/hooks/pre-commit.sh b/Biz/Ide/hooks/pre-commit
index e7c34ab..b0f204a 100755
--- a/Biz/Ide/hooks/pre-commit.sh
+++ b/Biz/Ide/hooks/pre-commit
@@ -7,7 +7,7 @@
mapfile -t changed < <(git diff-index --cached --name-only HEAD)
for ns in "${changed[@]}"
do
- version=$("${CODEROOT:?}"/Biz/Ide/version "$ns")
+ version=$("${CODEROOT:?}"/Biz/Ide/version.sh "$ns")
if [[ $version -eq -1 ]]; then
echo "info: version: $ns: deleted"
elif [[ $version -lt 1 ]]; then
diff --git a/Biz/Ide/hooks/pre-push.sh b/Biz/Ide/hooks/pre-push
index 16f11d1..16f11d1 100755
--- a/Biz/Ide/hooks/pre-push.sh
+++ b/Biz/Ide/hooks/pre-push
diff --git a/Biz/Ide/hooks/reference-transaction.sh b/Biz/Ide/hooks/reference-transaction
index ea0cce6..ea0cce6 100755
--- a/Biz/Ide/hooks/reference-transaction.sh
+++ b/Biz/Ide/hooks/reference-transaction