quorate/scripts/hooks/pre-commit.fsx

30 lines
1 KiB
Text
Raw Permalink Normal View History

#r "nuget: Tomlyn, 2.10.1"
#load "../../services/project-delivery/actions/masking.fsx"
open System
let checkIndex () =
let git arguments = Masking.run "git" arguments None
let entries =
git [ "ls-files"; "--stage"; "-z" ]
|> _.Split('\u0000', StringSplitOptions.RemoveEmptyEntries)
|> Array.map (fun entry ->
let fields = entry.Split('\t', 2)
let metadata = fields[0].Split(' ')
if metadata[2] <> "0" then
invalidOp "unmerged index"
fields[1], (metadata[0] = "100644" || metadata[0] = "100755", metadata[1]))
|> Map.ofArray
Masking.makePlan Masking.parseRules (entries |> Map.map (fun _ (regular, _) -> regular)) (fun path ->
git [ "cat-file"; "blob"; snd entries[path] ])
try
let plan = checkIndex ()
printfn "masks: %d staged masks verified; %d directories omitted" plan.Masks.Length plan.Omitted.Length
with :? InvalidOperationException as error ->
eprintfn "masks: %s" error.Message
exit 1