last_modified: don't find_blob; find the commit! #10
1 changed files with 29 additions and 27 deletions
|
@ -463,10 +463,15 @@ module Make (Pclock : Mirage_clock.PCLOCK) = struct
|
||||||
|
|
||||||
let last_modified t key =
|
let last_modified t key =
|
||||||
let open Lwt.Infix in
|
let open Lwt.Infix in
|
||||||
find_blob t key >>=
|
match t.committed, t.head with
|
||||||
Option.fold
|
| None, None ->
|
||||||
~none:(Lwt.return (Error (`Not_found key)))
|
Lwt.return (Error (`Not_found key))
|
||||||
~some:(fun head ->
|
| Some _, _ ->
|
||||||
|
Lwt.return_ok
|
||||||
|
(Option.fold
|
||||||
|
~none:Ptime.epoch
|
||||||
|
~some:Fun.id (Ptime.of_float_s (Int64.to_float (now ()))))
|
||||||
|
| None, Some head ->
|
||||||
Store.read_exn t.store head >|= function
|
Store.read_exn t.store head >|= function
|
||||||
| Commit c ->
|
| Commit c ->
|
||||||
let author = Git_commit.author c in
|
let author = Git_commit.author c in
|
||||||
|
@ -486,10 +491,7 @@ module Make (Pclock : Mirage_clock.PCLOCK) = struct
|
||||||
~some:Fun.id (Ptime.of_float_s (Int64.to_float secs))
|
~some:Fun.id (Ptime.of_float_s (Int64.to_float secs))
|
||||||
in
|
in
|
||||||
Ok ts
|
Ok ts
|
||||||
| _ ->
|
| _ -> assert false
|
||||||
|
hannes marked this conversation as resolved
Outdated
hannes
commented
this case shouldn't be needed this case shouldn't be needed
reynir
commented
What do you suggest instead? Mute partial match warnings?
What do you suggest instead? Mute partial match warnings?
```OCaml
let [@warning "-8"] (`Commit c) = Store.read_exn .. in
..
```
hannes
commented
yes, as done in yes, as done in `let pull`
reynir
commented
This is done in This is done in d2a0e526dad259f71fc7f741129aba8e476c8f7a. I found that there's no support for infix attributes on binding operators (.e.g `let+`) so I went with an intermediate binding.
https://github.com/ocaml/ocaml/issues/9301
|
||||||
Ok (Option.fold
|
|
||||||
~none:Ptime.epoch
|
|
||||||
~some:Fun.id (Ptime.of_float_s (Int64.to_float (now ())))))
|
|
||||||
|
|
||||||
let digest t key =
|
let digest t key =
|
||||||
let open Lwt.Infix in
|
let open Lwt.Infix in
|
||||||
|
|
Loading…
Reference in a new issue
We ended up here due to
find_blob
returning aBlob _
and not aCommit _
(how surprising given the name!)should the same be applied to
digest
-- where !6 and !8 introduced theval commit
since we ended up in https://github.com/robur-coop/git-kv/issues/6...Hm. To me it seems fine that
digest
returns the blob. As I understand it it's a digest that represents the file data. Maybe @dinosaure, who has a much better understanding of both git and ocaml-git, has an opinion?What
digest
should return is a unique hash of the data. This can be achieved by the last commit sha1. This can as well be done by computing a hash of the content.Here, it is nowadays computed by the commit if we're not in change_and_push, and by this Blob thingy if we're in change_and_push. Of course we can leave that as is -- but I think that having a divergence in what the digest is computed over depending on whether we're in change_and_push or not may lead to unexpected strange error situations.
But this is off-topic to the PR you propose here...