let split_filetypes files = let acc (dirs, files) x = if Sys.is_directory x then (x::dirs, files) else (dirs, x::files) in List.fold_left acc ([],[]) files open Logarion let file files = let dirs, files = split_filetypes files in let _link_as_named dir file = Unix.link file (Filename.concat dir file) in let link_with_id dir file = match File_store.to_text file with Error s -> prerr_endline s | Ok t -> Unix.link file (Filename.concat dir (Text.short_id t^".txt")) in let link = link_with_id in List.iter (fun d -> List.iter (link d) files) dirs let unfile files = let dirs, files = split_filetypes files in let unlink dir file = try Unix.unlink (Filename.concat dir file) with Unix.(Unix_error(ENOENT,_,_))-> () in List.iter (fun d -> List.iter (unlink d) files) dirs open Cmdliner let term = let files = Arg.(value & pos_all string [] & info [] ~docv:"text filenames and subdirectories") in Term.(const file $ files), Term.info "file" ~doc:"file texts in subdirectories" ~man:[ `S "DESCRIPTION"; `P "Files all texts in parameter in every directory in parameter, using hardlinks. Use it to create sub-repositories for sharing or converting" ] let unfile_term = let files = Arg.(value & pos_all string [] & info [] ~docv:"text filenames and subdirectories") in Term.(const unfile $ files), Term.info "unfile" ~doc:"unfile texts from subdirectories" ~man:[ `S "DESCRIPTION"; `P "unfile texts in parameter from directories in parameter, by removing hardlinks" ]