X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fgetter%2Fhttp_getter_cache.ml;h=62a009c0f954e5cc0ae5f1c8a2b58bdb604f6cf9;hb=7e9904185ceff75884783dbf0bad506b8521b857;hp=144b9ac5f4c5ad99f9ebad8fb528a4977878a3f0;hpb=3fd8583f198e7e09995c3a65b5f05a853c8d1646;p=helm.git diff --git a/helm/ocaml/getter/http_getter_cache.ml b/helm/ocaml/getter/http_getter_cache.ml index 144b9ac5f..62a009c0f 100644 --- a/helm/ocaml/getter/http_getter_cache.ml +++ b/helm/ocaml/getter/http_getter_cache.ml @@ -76,6 +76,8 @@ let is_in_cache basename = let respond_xml ?(via_http = true) ?(enc = `Normal) ?(patch = true) ~url ~uri outchan = + let local_part = Http_getter_misc.local_url url in + let local_resource = local_part <> None in let resource_type = resource_type_of_url url in let extension = extension_of_resource_type resource_type in let downloadname = @@ -122,7 +124,10 @@ let respond_xml file name *) let fill_cache () = threadSafe#doWriter (lazy( - if not (is_in_cache basename) then begin (* cache MISS *) + if local_resource then begin (* resource available via file system *) + Http_getter_logger.log ~level:2 "Local resource, avoid caching"; + None + end else if not (is_in_cache basename) then begin (* cache miss *) Http_getter_logger.log ~level:2 "Cache MISS :-("; mkdir ~parents:true (Filename.dirname downloadname); match (resource_type, Lazy.force Http_getter_env.cache_mode) with @@ -155,17 +160,24 @@ let respond_xml gunzip ~output:basename ~keep:true tmp; (* fill cache *) res )); - end else begin + end else begin (* cache hit *) Http_getter_logger.log ~level:2 "Cache HIT :-)"; None end )) in let tmp_short_circuit = fill_cache () in threadSafe#doReader (lazy( - assert (is_in_cache basename); - match (enc, Lazy.force Http_getter_env.cache_mode) with + assert (local_resource || is_in_cache basename); + let basename = match local_part with Some f -> f | None -> basename in + let resource_type = + if local_resource then + resource_type + else + Lazy.force Http_getter_env.cache_mode + in + match (enc, resource_type) with | `Normal, `Normal | `Gzipped, `Gzipped -> - (* resource in cache is already in the required format *) + (* resource (in cache or local) is already in the required format *) (match enc with | `Normal -> Http_getter_logger.log ~level:2 @@ -182,12 +194,12 @@ let respond_xml (match tmp_short_circuit with | None -> (* no short circuit possible, use cache *) Http_getter_logger.log ~level:2 - "No short circuit available, use cache"; + "No short circuit available, use cache (or local resource)"; let tmp = tempfile () in finally (fun () -> Sys.remove tmp) (lazy ( (match enc with | `Normal -> - (* required format is normal, cached version is gzipped *) + (* required format normal, cached (or local) version gzipped *) gunzip (* gunzip to tmp *) ~output:tmp ~keep:true (basename ^ ".gz"); return_file ~via_http ~fname:tmp ~contype ~patch_fun outchan;