X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fmatita%2Fmatitaclean.ml;h=a3183c16110fdeb03e273b3f55caac0baa1f08f9;hb=eadeb433386822aac6862c76ba73957c07a99098;hp=826a4a2822abb4301c9ad10b9d83089fb32ca030;hpb=55b82bd235d82ff7f0a40d980effe1efde1f5073;p=helm.git diff --git a/helm/software/matita/matitaclean.ml b/helm/software/matita/matitaclean.ml index 826a4a282..a3183c161 100644 --- a/helm/software/matita/matitaclean.ml +++ b/helm/software/matita/matitaclean.ml @@ -32,13 +32,44 @@ module TA = GrafiteAst let clean_suffixes = [ ".moo"; ".lexicon"; ".metadata"; ".xml.gz" ] -let main () = - let _ = MatitaInit.initialize_all () in - let basedir = Helm_registry.get "matita.basedir" in - match Helm_registry.get_list Helm_registry.string "matita.args" with - | [ "all" ] -> - LibraryDb.clean_owner_environment (); - let xmldir = basedir ^ "/xml" in +let ask_confirmation _ = + print_string " + You are trying to delete the whole standard library. + Since this may be a dangerous operation, you are asked to type + + yes, I'm sure + + verbatim and press enter.\n\n> "; + flush stdout; + let str = input_line stdin in + if str = "yes, I'm sure" then + begin + print_string "deletion in progess...\n"; + flush stdout + end + else + begin + print_string "deletion cancelled.\n"; + flush stdout; + exit 1 + end +;; + +let clean_all () = + if Helm_registry.get_bool "matita.system" then + ask_confirmation (); + LibraryDb.clean_owner_environment (); + let prefixes = + HExtlib.filter_map + (fun s -> + if String.sub s 0 5 = "file:" then + Some (Str.replace_first (Str.regexp "^file://") "" s) + else + None) + (Http_getter_storage.list_writable_prefixes ()) + in + List.iter + (fun xmldir -> let clean_pat = String.concat " -o " (List.map (fun suf -> "-name \\*" ^ suf) clean_suffixes) in @@ -48,26 +79,44 @@ let main () = ignore (Sys.command clean_cmd); ignore (Sys.command ("find " ^ xmldir ^ - " -type d -exec rmdir -p {} \\; 2> /dev/null")); - exit 0 - | [] -> MatitaInit.die_usage () - | files -> - let uris_to_remove = - List.fold_left - (fun uris_to_remove suri -> - let uri = - try - UM.buri_of_uri (UM.uri_of_string suri) - with UM.IllFormedUri _ -> - let u = - DependenciesParser.baseuri_of_script ~include_paths:[] suri in - if String.length u < 5 || String.sub u 0 5 <> "cic:/" then begin - HLog.error (sprintf "File %s defines a bad baseuri: %s" - suri u); - exit 1 - end else - u - in - uri::uris_to_remove) [] files - in - LibraryClean.clean_baseuris ~basedir uris_to_remove + " -type d -exec rmdir -p {} \\; 2> /dev/null"))) + prefixes; + ignore (Sys.command ("rm -rf " ^ Helm_registry.get "matita.basedir")) +;; + +let main () = + let _ = MatitaInit.initialize_all () in + if not (Helm_registry.get_bool "matita.verbose") then MatitaMisc.shutup (); + let files = + match Helm_registry.get_list Helm_registry.string "matita.args" with + | [ "all" ] -> clean_all (); exit 0 + | [] -> + (match Librarian.find_roots_in_dir (Sys.getcwd ()) with + | [x] -> + Sys.chdir (Filename.dirname x); + HExtlib.find ~test:(fun x -> Filename.check_suffix x ".ma") "." + | [] -> + prerr_endline "No targets and no root found"; exit 1 + | roots -> + let roots = List.map (HExtlib.chop_prefix (Sys.getcwd()^"/")) roots in + prerr_endline ("Too many roots found:\n\t" ^ String.concat "\n\t" roots); + prerr_endline ("\nEnter one of these directories and retry"); + exit 1); + | files -> files + in + let uris_to_remove = + List.fold_left + (fun uris_to_remove suri -> + let uri = + try + UM.buri_of_uri (UM.uri_of_string suri) + with UM.IllFormedUri _ -> + let _,u,_,_ = Librarian.baseuri_of_script ~include_paths:[] suri in + if Librarian.is_uri u then u else begin + HLog.error (sprintf "File %s defines a bad baseuri: %s" suri u); + exit 1 + end + in + uri::uris_to_remove) [] files + in + LibraryClean.clean_baseuris uris_to_remove