X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fmatita%2FmatitaSync.ml;h=8f8a66e098fc9378e73ace85e7c2d1a5d8e93e05;hb=f94eb70000832bc252cd4a510a1ede4d8197a4a8;hp=6573e39822f991840d8cbca78fce0779d336de8b;hpb=d4ace1a2d7b08813af331e33efb499bcea4888f5;p=helm.git diff --git a/helm/matita/matitaSync.ml b/helm/matita/matitaSync.ml index 6573e3982..8f8a66e09 100644 --- a/helm/matita/matitaSync.ml +++ b/helm/matita/matitaSync.ml @@ -27,33 +27,52 @@ open Printf open MatitaTypes +let alias_diff ~from status = + let module Map = DisambiguateTypes.Environment in + Map.fold + (fun domain_item codomain_item acc -> + if not (Map.mem domain_item from.aliases) then + Map.add domain_item codomain_item acc + else + acc) + status.aliases Map.empty + +let set_proof_aliases status aliases = + let new_status = {status with aliases = aliases } in + let diff = alias_diff ~from:status new_status in + let moo_content_rev = + CicTextualParser2.EnvironmentP3.to_string diff :: + status.moo_content_rev in + {new_status with moo_content_rev = moo_content_rev} + (** given a uri and a type list (the contructors types) builds a list of pairs * (name,uri) that is used to generate authomatic aliases **) let extract_alias types uri = fst(List.fold_left ( fun (acc,i) (name, _, _, cl) -> - ((name, UriManager.string_of_uriref (uri,[i])) + (name, UriManager.string_of_uri (UriManager.uri_of_uriref uri i None)) :: (fst(List.fold_left ( fun (acc,j) (name,_) -> - (((name,UriManager.string_of_uriref (uri,[i;j])) :: acc) , j+1) - ) (acc,1) cl))),i+1 + (((name,UriManager.string_of_uri (UriManager.uri_of_uriref uri i + (Some j))) :: acc) , j+1) + ) (acc,1) cl)),i+1 ) ([],0) types) let env_of_list l env = - let l' = List.map (fun (name,suri) -> name,suri,CicUtil.term_of_uri suri) l in + let l' = List.map (fun (name,suri) -> name,suri,CicUtil.term_of_uri (UriManager.uri_of_string suri)) l in DisambiguateTypes.env_of_list l' env let add_aliases_for_inductive_def status types suri = let uri = UriManager.uri_of_string suri in let aliases = env_of_list (extract_alias types uri) status.aliases in - {status with aliases = aliases } + set_proof_aliases status aliases let add_alias_for_constant status suri = let uri = UriManager.uri_of_string suri in let name = UriManager.name_of_uri uri in let new_env = env_of_list [(name,suri)] status.aliases in - {status with aliases = new_env } + set_proof_aliases status new_env let add_aliases_for_object status suri = function @@ -211,13 +230,34 @@ let time_travel ~present ~past = MatitaLog.debug "l2:"; List.iter MatitaLog.debug l2 -let alias_diff ~from status = - let module Map = DisambiguateTypes.Environment in - Map.fold - (fun domain_item codomain_item acc -> - if not (Map.mem domain_item from.aliases) then - Map.add domain_item codomain_item acc - else - acc) - status.aliases Map.empty +let remove uri = + let derived_uris_of_uri uri = + UriManager.innertypesuri_of_uri uri :: + UriManager.annuri_of_uri uri :: + (match UriManager.bodyuri_of_uri uri with + | None -> [] + | Some u -> [u]) + in + let to_remove = + uri :: + (if UriManager.uri_is_ind uri then MatitaDb.xpointers_of_ind uri else []) @ + derived_uris_of_uri uri + in + List.iter + (fun uri -> + (try + let path = + let path = Http_getter.resolve' (UriManager.strip_xpointer uri) in + assert (String.sub path 0 7 = "file://"); + String.sub path 7 (String.length path - 7) + in + MatitaLog.debug ("Removing: " ^ UriManager.string_of_uri uri); + remove_object_from_disk uri path; + with + Http_getter_types.Key_not_found _ -> Http_getter.unregister' uri); + remove_coercion uri; + ignore(MatitaDb.remove_uri uri)) + to_remove + +