#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