open Lib; let main = () => { Lib.Watches.( switch (Util.get_args(Sys.argv)) { | Ok((layout_directory, flake_specifier, other_args)) => switch (preflight(layout_directory)) { | Ok () => switch (Lib.Watches.get()) { | Ok(watches) => let paths = Array.map(watch => watch.path, watches); let hash = switch (Util.hash_files(paths)) { | Ok(hsh) => hsh | Error(msg) => Printf.eprintf("%s\n", msg); exit(1); }; let profile = layout_directory ++ "/flake-profile-" ++ hash; let profile_rc = profile ++ ".rc"; switch (Lib.Util.is_file(profile_rc), Lib.Util.is_file(profile)) { | (true, true) => let profile_rc_mtime = Unix.stat(profile_rc).st_mtime; let all_older = Array.map(watch => watch.modtime, watches) |> Array.for_all(watch_mtime => watch_mtime <= int_of_float(profile_rc_mtime) ); if (all_older) { print_cur_cache(profile_rc); } else { freshen_cache( layout_directory, hash, flake_specifier, other_args, ); }; | _ => freshen_cache(layout_directory, hash, flake_specifier, other_args) }; | Error(e) => Printf.eprintf("%s\n", e); exit(1); } | Error(e) => Printf.eprintf("%s\n", e); exit(1); } | Error () => Printf.eprintf( "%s <...args>\n", Sys.argv[0], ); exit(1); } ); }; let () = main();