I had looked at the code and figured it should be called for added and deleted 
objects as well but it’s not. Below is a code snippet that I test with. Does it 
look right?

Thanks,
Gregory

open Lwt
open Irmin_unix

let opt_eq x = function
  | None -> None = x
  | Some v -> v = x

module ImapContents =
  struct
    include Irmin.Contents.String
    let merge path ~old x y =
      let open Irmin.Merge.OP in
      Printf.printf "merging path: %s %b\n%!" (String.concat "/" path) (x = y);
      old () >>= function
      | `Conflict _ -> ok y
      | `Ok old ->
      if opt_eq x old then (
        ok y
      ) else if opt_eq y old then (
        ok x
      ) else (
        ok y
      )
  end

let fetch remote local =
  let store = Irmin.basic (module Irmin_git.FS) (module ImapContents) in
  let config = Irmin_git.config ~root:local ~bare:true () in
  Irmin.create store config task >>= fun t ->
  let upstream = Irmin.remote_uri remote in
  Irmin.pull_exn (t "Syncing with upstream store") upstream `Merge

let () =
  Lwt_main.run (
    catch (fun () -> fetch Sys.argv.(1) Sys.argv.(2))
        (fun ex -> Printf.printf "----- exception %s\n%!" (Printexc.to_string 
ex); return ())
  )
> On Aug 5, 2015, at 11:45 PM, Thomas Gazagnaire <[email protected]> wrote:
> 
>> I have a question about Irmin merge call back for user-defined contents. It 
>> appears that merge is only called for the content that was changed but not 
>> added or deleted. Is it possible to have it called for all actions?
> 
> It's supposed to be called even when one of the version is added or deleted. 
> In that case one of the values will be a None. That's why the merge callback 
> [1] takes an option type. Notice that you should not normally have None for 
> all the 3 elements of the 3-way merge.
> 
> Best,
> Thomas
> 
> [1] http://mirage.github.io/irmin/Irmin.Contents.S.html#VALmerge
> 

_______________________________________________
MirageOS-devel mailing list
[email protected]
http://lists.xenproject.org/cgi-bin/mailman/listinfo/mirageos-devel

Reply via email to