- default equality e famiglia non e' undo-aware
- nuovo pretty-printer testuale: non stampa usando la notazione
(e.g. guardare output di matitac)
- - matitaclean (e famiglia) non cancellano le directory vuote
- (e per giunta il cicbrowser le mostra :-)
- fattorizzare codice fra MatitaEngine e DisambiguatePp (dove, fra l'altro,
ora io (=CSC) ho messo anche un parser!!!)
- bug "Warn: baseuri cic:/matita/higher_order_defs/ordering is not empty"
DEMONI E ALTRO
DONE
+- matitaclean (e famiglia) non cancellano le directory vuote
+ (e per giunta il cicbrowser le mostra :-) -> Gares
- missing feature unification: applicazione di teoremi (~A) quando il goal
e' False o di teoremi $symmetric R P$ quando il goal e' $P(x,y)$.
Fare un passo di delta[-beta?][-iota-etc.] quando da una parte c'e' una
let safe_remove fname = if Sys.file_exists fname then Sys.remove fname
+let is_dir_empty d =
+ try
+ let od = Unix.opendir d in
+ try
+ ignore (Unix.readdir od);
+ ignore (Unix.readdir od);
+ ignore (Unix.readdir od);
+ Unix.closedir od;
+ false
+ with End_of_file ->
+ Unix.closedir od;
+ true
+ with Unix.Unix_error _ -> true
+
+let safe_rmdir d = try Unix.rmdir d with Unix.Unix_error _ -> ()
+
+let rec rmdir_descend d =
+ if is_dir_empty d then
+ begin
+ safe_rmdir d;
+ rmdir_descend (Filename.dirname d)
+ end
let absolute_path file =
if file.[0] = '/' then file else Unix.getcwd () ^ "/" ^ file
(** removes a file if it exists *)
val safe_remove: string -> unit
+(** removes a dir if it exists and is empty *)
+val safe_rmdir: string -> unit
+(** checks if the dir is empty *)
+val is_dir_empty: string -> bool
+(** removes a directory and recursively the father (if empty) *)
+val rmdir_descend: string -> unit
val absolute_path: string -> string
MatitaLog.debug ("Removing: " ^ baseuri ^ "/*");
last_baseuri := baseuri
end;
- MatitaMisc.safe_remove (Http_getter.resolve' uri)
+ let file = Http_getter.resolve' uri in
+ MatitaMisc.safe_remove file;
+ MatitaMisc.rmdir_descend (Filename.dirname file)
with Http_getter_types.Key_not_found _ -> ());
remove_coercion uri;
ignore (MatitaDb.remove_uri uri);
List.iter (fun u -> debug_prerr (UriManager.string_of_uri u)) l;
Hashtbl.iter
(fun buri _ ->
- MatitaMisc.safe_remove (MatitaMisc.obj_file_of_baseuri buri)
- ) cache_of_processed_baseuri;
+ MatitaMisc.safe_remove (MatitaMisc.obj_file_of_baseuri buri))
+ cache_of_processed_baseuri;
List.iter (MatitaSync.remove ~verbose) l;
cleaned_no := !cleaned_no + List.length l;
if !cleaned_no > 30 then