Changeset 42 in code for trunk/cli/convert.ml
- Timestamp:
- Dec 15, 2022, 9:25:18 PM (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/cli/convert.ml
r41 r42 27 27 t 28 28 29 let acc_ref id t a = 30 Conversion.Id_map.update t (function 31 | Some s -> Some (Conversion.Ref_set.add id s) 32 | None -> Some (Conversion.Ref_set.singleton id) 33 ) a 29 let acc_rel source target a = 30 prerr_endline source; 31 Conversion.Id_map.update target 32 (function Some set -> Some (Conversion.Ref_set.add source set) 33 | None -> Some (Conversion.Ref_set.singleton source)) 34 a 34 35 35 let fold_refs text refs = String_set.fold (acc_ref text.Text.id) (Text.set "references" text) refs 36 let fold_reps text reps = String_set.fold (acc_ref text.Text.id) (Text.set "in-reply-to" text) reps 36 let empty_rels () = Conversion.Id_map.empty, Conversion.Id_map.empty 37 38 let acc_txt_refs text refs = String_set.fold (acc_rel text.Text.id) (Text.set "references" text) refs 39 let acc_txt_reps text reps = String_set.fold (acc_rel text.Text.id) (Text.set "in-reply-to" text) reps 40 let acc_txt_rels (refs, reps) (elt, _paths) = 41 acc_txt_refs elt refs, acc_txt_reps elt reps 42 43 let acc_pck_refs id refs_ls refs = String_set.fold (acc_rel id) (String_set.of_list refs_ls) refs 44 let acc_pck_reps id reps_ls reps = String_set.fold (acc_rel id) (String_set.of_list reps_ls) reps 45 let acc_pck_rels refs_reps peer = 46 let path = try List.hd peer.Peers.pack.Header_pack.info.locations with Failure _ -> "" in 47 try Header_pack.fold 48 (fun (refs, reps) id _t _title _authors _topics refs_ls reps_ls -> 49 let id = Filename.concat path id in 50 acc_pck_refs id refs_ls refs, acc_pck_reps id reps_ls reps) 51 refs_reps peer.Peers.pack 52 with e -> prerr_endline "acc_pck_rels"; raise e 37 53 38 54 let directory converters noindex repo = 39 let fn (ts,refs,reps,ls,acc) ((elt,_) as r) = 40 Topic_set.to_map ts (Text.set "topics" elt), 41 fold_refs elt refs, fold_reps elt reps, 42 elt::ls, 43 if convert converters {repo with references = refs; replies = reps} r then acc+1 else acc in 44 let topics, references, replies, texts, count = 45 File_store.(fold ~dir:repo.Conversion.dir ~order:oldest fn 46 (Topic_set.Map.empty, Conversion.Id_map.empty, Conversion.Id_map.empty, [], 0)) in 55 let order = File_store.oldest in 56 let repo = 57 let references, replies = 58 File_store.fold ~dir:repo.Conversion.dir ~order acc_txt_rels (empty_rels ()) in 59 let references, replies = Peers.fold acc_pck_rels (references, replies) in 60 Printf.eprintf "%s %d\n" repo.Conversion.dir (Conversion.Id_map.cardinal replies); 61 { repo with references; replies } in 62 let acc (ts,ls,acc) ((elt,_) as r) = Topic_set.to_map ts (Text.set "topics" elt), elt::ls, 63 if convert converters repo r then acc+1 else acc in 64 let topics, texts, count = 65 File_store.fold ~dir:repo.Conversion.dir ~order acc (Topic_set.Map.empty, [], 0) in 47 66 let topic_roots = try List.rev @@ String_set.list_of_csv (Store.KV.find "Topics" repo.kv) 48 67 with Not_found -> Topic_set.roots topics in 49 Printf.eprintf "%d\n" (Conversion.Id_map.cardinal replies); 50 let repo = Conversion.{ repo with 51 topic_roots; topics; references; replies; texts = List.rev texts } in 68 let repo = Conversion.{ repo with topic_roots; topics; texts = List.rev texts } in 52 69 if not noindex then 53 70 List.iter (fun c -> match c.Conversion.indices with None -> () | Some f -> f repo) converters; … … 79 96 | Ok text -> 80 97 let dir = "." in 81 let references, replies = File_store.(fold ~dir ~order:newest 82 (fun (refs, reps) (elt, _) -> fold_refs elt refs, fold_reps elt reps) 83 (Conversion.Id_map.empty, Conversion.Id_map.empty)) in 98 let references, replies = File_store.(fold ~dir ~order:newest acc_txt_rels (empty_rels ())) in 84 99 let repo = { (Conversion.empty ()) with dir; kv = load_kv ""; references; replies } in 85 100 ignore @@ convert (converters types repo.kv) repo (text, [path])
Note:
See TracChangeset
for help on using the changeset viewer.