]> matita.cs.unibo.it Git - helm.git/blobdiff - matita/matitaclean.ml
tagging rc-1
[helm.git] / matita / matitaclean.ml
index 826a4a2822abb4301c9ad10b9d83089fb32ca030..cf8bf42f4467f0628e93dad1d2d9b625a87112ec 100644 (file)
@@ -32,23 +32,59 @@ module TA = GrafiteAst
 
 let clean_suffixes = [ ".moo"; ".lexicon"; ".metadata"; ".xml.gz" ]
 
+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 main () =
   let _ = MatitaInit.initialize_all () in
-  let basedir = Helm_registry.get "matita.basedir" in
+  if Helm_registry.get_bool "matita.bench" then MatitaMisc.shutup ();
   match Helm_registry.get_list Helm_registry.string "matita.args" with
   | [ "all" ] ->
+      if Helm_registry.get_bool "matita.system" then
+        ask_confirmation ();
       LibraryDb.clean_owner_environment ();
-      let xmldir = basedir ^ "/xml" in
-      let clean_pat =
-        String.concat " -o "
-          (List.map (fun suf -> "-name \\*" ^ suf) clean_suffixes) in
-      let clean_cmd =
-        sprintf "find %s \\( %s \\) -exec rm \\{\\} \\; 2> /dev/null"
-          xmldir clean_pat in
-      ignore (Sys.command clean_cmd);
-      ignore 
-       (Sys.command ("find " ^ xmldir ^ 
-        " -type d -exec rmdir -p {} \\; 2> /dev/null"));
+      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
+          let clean_cmd =
+            sprintf "find %s \\( %s \\) -exec rm \\{\\} \\; 2> /dev/null"
+              xmldir clean_pat in
+          ignore (Sys.command clean_cmd);
+          ignore 
+           (Sys.command ("find " ^ xmldir ^ 
+            " -type d -exec rmdir -p {} \\; 2> /dev/null"))) 
+        prefixes;
       exit 0
   | [] -> MatitaInit.die_usage ()
   | files ->
@@ -59,7 +95,7 @@ let main () =
             try
               UM.buri_of_uri (UM.uri_of_string suri)
             with UM.IllFormedUri _ ->
-              let u =
+              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"
@@ -70,4 +106,4 @@ let main () =
           in
            uri::uris_to_remove) [] files
      in
-      LibraryClean.clean_baseuris ~basedir uris_to_remove
+      LibraryClean.clean_baseuris uris_to_remove