30 lines
1 KiB
Text
30 lines
1 KiB
Text
|
|
#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
|