diff options
| author | ยท๐๐ด๐๐๐ฉ๐ค | 2025-12-31 04:45:45 +0000 |
|---|---|---|
| committer | ยท๐๐ด๐๐๐ฉ๐ค | 2025-12-31 04:45:45 +0000 |
| commit | 996f116bc9522a8e1a81da8eee6e39714fb8d9f2 (patch) | |
| tree | 25369a3a0975e8c8ab7b3d9957f939a64d1b0c36 /lib/input_foreman.ml | |
| parent | b06db119812b9dd7df66931e38972ea84a711605 (diff) | |
| download | nixtaml-996f116bc9522a8e1a81da8eee6e39714fb8d9f2.tar nixtaml-996f116bc9522a8e1a81da8eee6e39714fb8d9f2.tar.gz nixtaml-996f116bc9522a8e1a81da8eee6e39714fb8d9f2.tar.bz2 nixtaml-996f116bc9522a8e1a81da8eee6e39714fb8d9f2.tar.lz nixtaml-996f116bc9522a8e1a81da8eee6e39714fb8d9f2.tar.xz nixtaml-996f116bc9522a8e1a81da8eee6e39714fb8d9f2.tar.zst nixtaml-996f116bc9522a8e1a81da8eee6e39714fb8d9f2.zip | |
Silo: unlink/rm first
Diffstat (limited to 'lib/input_foreman.ml')
| -rw-r--r-- | lib/input_foreman.ml | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/lib/input_foreman.ml b/lib/input_foreman.ml index 6845529..02020a1 100644 --- a/lib/input_foreman.ml +++ b/lib/input_foreman.ml @@ -174,22 +174,37 @@ let to_lockfile mk = (fun acc (name, input) -> NameMap.add name (mk input) acc) NameMap.empty +let unlink_or_rm_silo ~(at : [`Path of _ Eio.Path.t | `Name of Name.t]) = + let path = + match at with + | `Path p -> p + | `Name n -> Eio.Path.(Working_directory.(get () / silo_dir) / Name.take n) + in + match Eio.Path.kind ~follow: false path with + | `Symbolic_link -> + Eio.Path.unlink path; + Logs.debug (fun m -> m "Silo: unlinked %a." Eio.Path.pp path) + | `Directory | `Regular_file | `Socket -> + Eio.Path.rmtree path; + Logs.debug (fun m -> m "Silo: removed %a." Eio.Path.pp path) + | _ -> + () + +let make_silo_link ~name ~link_to = + let name = Name.take name in + let path = Eio.Path.(Working_directory.(get () / silo_dir) / name) in + Logs.info (fun m -> m "Silo: filling with %s โฆ %a โฆ" name Eio.Path.pp path); + unlink_or_rm_silo ~at: (`Path path); + Eio.Path.symlink path ~link_to + let clean_unlisted_from_silo () = Logs.debug (fun m -> m "Silo: cleaning unlisted โฆ"); let silo_path = Eio.Path.(Working_directory.(get () / silo_dir)) in Eio.Path.read_dir silo_path - |> List.iter (fun name -> - if not (Htbl.mem inputs (Name.make name)) then - let path = Eio.Path.(silo_path / name) in - match Eio.Path.kind ~follow: false path with - | `Symbolic_link -> - Eio.Path.unlink path; - Logs.info (fun m -> m "Silo: unlinked %a." Eio.Path.pp path) - | `Directory | `Regular_file | `Socket -> - Eio.Path.rmtree path; - Logs.info (fun m -> m "Silo: removed %a." Eio.Path.pp path) - | _ -> - () + |> List.iter (fun nm -> + let name = Name.make nm in + if not (Htbl.mem inputs name) then + unlink_or_rm_silo ~at: (`Name name) else () ) @@ -473,7 +488,7 @@ let prefetch ~env ~proc_mgr ~name () : (unit, error) result = end in Logs.app (fun m -> m "Prefetched %a." Name.pp input.name); - Working_directory.make_silo_link ~name: (Name.take name) ~link_to: new_silo_link; + make_silo_link ~name ~link_to: new_silo_link; set name new_input let run_pipeline ~sw ~proc_mgr ~(models : Input.jg_models2) cmds = |
