mirror of
https://git.sr.ht/~bryan_bennett/flake_env
synced 2025-12-16 14:41:24 +01:00
Core doubles the closure size and adds 8mb to the binary size for dubious benefit. This adds FileUtils to do the file interaction bits that aren't in the stdlib and removes Core in preference to the bundled Stdlib. Tests are passing, but I want to investigate the nix build before I commit to this approach
62 lines
1.7 KiB
ReasonML
62 lines
1.7 KiB
ReasonML
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 <layout_directory> <flake specifier> <...args>\n",
|
|
Sys.argv[0],
|
|
);
|
|
exit(1);
|
|
}
|
|
);
|
|
};
|
|
|
|
let () = main();
|