diff --git a/app/dune b/app/dune index db9e16b..6c5e5c0 100644 --- a/app/dune +++ b/app/dune @@ -1,3 +1,3 @@ (executable (name mgit) - (libraries mirage-clock-unix logs.fmt fmt.tty git-unix git-kv)) + (libraries mirage-clock-unix logs.fmt fmt.tty git-unix git-kv mirage-crypto-rng.unix)) diff --git a/app/mgit.ml b/app/mgit.ml index e9e065f..067e62f 100644 --- a/app/mgit.ml +++ b/app/mgit.ml @@ -82,6 +82,15 @@ let list ~quiet store key = if not quiet then Fmt.epr "%a.\n%!" Store.pp_error err ; Lwt.return (Ok 1) +let last_modified ~quiet store key = + Store.last_modified store key >>= function + | Ok time -> + Fmt.pr "%a\n%!" Ptime.pp time; + Lwt.return (Ok 0) + | Error err -> + if not quiet then Fmt.epr "%a.\n%!" Store.pp_error err ; + Lwt.return (Ok 1) + let pull ~quiet store = Git_kv.pull store >>= function | Error (`Msg err) -> if not quiet then Fmt.epr "%s.\n%!" err ; Lwt.return (Ok 1) @@ -134,6 +143,9 @@ let repl store fd_in = | [ "list"; key; ] -> with_key ~f:(list ~quiet:false store0) key >|= ignore >>= fun () -> go store0 + | [ "mtime"; key; ] -> + with_key ~f:(last_modified ~quiet:false store0) key + >|= ignore >>= fun () -> go store0 | [ "pull"; ] -> if is_a_tty then Fmt.pr "\n%!" ; pull ~quiet:false store0 >|= ignore >>= fun () -> go store0 @@ -169,6 +181,10 @@ let run remote = function | Ok t -> repl t Unix.stdin | Error (`Msg err) -> Fmt.failwith "%s." err ) +let run remote filename_opt = + let () = Mirage_crypto_rng_unix.initialize (module Mirage_crypto_rng.Fortuna) in + run remote filename_opt + let () = match Sys.argv with | [| _; remote; |] -> run remote None | [| _; remote; filename; |] when Sys.file_exists filename ->