X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;ds=sidebyside;f=helm%2Fmatita%2FmatitacleanLib.ml;h=4218492f4ebea739c6ec4a906696fe06a2bbf70a;hb=5d5e328a05ed70fcf565aef8f92b7ec87b2740f2;hp=992443a357681615771315cac4710c87aadd067b;hpb=ee3f2aa5b78aa77555e5e81d5a2d92501889649e;p=helm.git diff --git a/helm/matita/matitacleanLib.ml b/helm/matita/matitacleanLib.ml index 992443a35..4218492f4 100644 --- a/helm/matita/matitacleanLib.ml +++ b/helm/matita/matitacleanLib.ml @@ -1,8 +1,44 @@ +(* Copyright (C) 2005, HELM Team. + * + * This file is part of HELM, an Hypertextual, Electronic + * Library of Mathematics, developed at the Computer Science + * Department, University of Bologna, Italy. + * + * HELM is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * HELM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with HELM; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, + * MA 02111-1307, USA. + * + * For details, see the HELM World-Wide-Web page, + * http://helm.cs.unibo.it/ + *) + +let debug = false +let debug_prerr = if debug then prerr_endline else ignore + module HGT = Http_getter_types;; module HG = Http_getter;; +module HGM = Http_getter_misc;; module UM = UriManager;; module TA = TacticAst;; +let baseuri_of_baseuri_decl st = + let module TA = TacticAst in + match st with + | TA.Executable (_, TA.Command (_, TA.Set (_, "baseuri", buri))) -> + Some buri + | _ -> None + let cache_of_processed_baseuri = Hashtbl.create 1024 let one_step_depend suri = @@ -21,12 +57,17 @@ let one_step_depend suri = let buri = Mysql.escape buri in let obj_tbl = MetadataTypes.obj_tbl () in Printf.sprintf - "SELECT source FROM %s WHERE h_occurrence LIKE '%s%%'" obj_tbl buri + "SELECT source, h_occurrence FROM %s WHERE h_occurrence LIKE '%s%%'" obj_tbl buri in try let rc = Mysql.exec (MatitaDb.instance ()) query in let l = ref [] in - Mysql.iter rc (fun a -> match a.(0) with None ->()|Some a -> l:=a:: !l); + Mysql.iter rc ( + fun row -> + match row.(0), row.(1) with + | Some uri, Some occ when Filename.dirname occ = buri -> + l := uri :: !l + | _ -> ()); let l = List.sort Pervasives.compare !l in MatitaMisc.list_uniq l with @@ -90,10 +131,10 @@ let baseuri_of_file file = close_in ic; let uri = ref "" in List.iter - (function - | TA.Executable (_, TA.Command (_, TA.Set (_, "baseuri", buri))) -> - uri := MatitaMisc.strip_trailing_slash buri - | _ -> ()) + (fun stm -> + match baseuri_of_baseuri_decl stm with + | Some buri -> uri := MatitaMisc.strip_trailing_slash buri + | None -> ()) stms; !uri @@ -102,9 +143,19 @@ let rec fix uris next = | [] -> uris | l -> let uris, next = close_uri_list l in fix uris next @ uris -let clean_baseuris buris = +let clean_baseuris ?(verbose=true) buris = + Hashtbl.clear cache_of_processed_baseuri; + let buris = List.map HGM.strip_trailing_slash buris in + debug_prerr "clean_baseuris called on:"; + if debug then + List.iter debug_prerr buris; let l = fix [] buris in let l = MatitaMisc.list_uniq (List.fast_sort Pervasives.compare l) in let l = List.map UriManager.uri_of_string l in - List.iter MatitaSync.remove l + debug_prerr "clean_baseuri will remove:"; + if debug then + List.iter (fun u -> debug_prerr (UriManager.string_of_uri u)) l; + List.iter (MatitaSync.remove ~verbose) l +let is_empty buri = HG.ls (HGM.strip_trailing_slash buri ^ "/") = [] +