let respond_xml
?(via_http = true) ?(enc = `Normal) ?(patch = true) ~url ~uri outchan
=
+ let local_resource = Http_getter_misc.is_local_url url in
let resource_type = resource_type_of_url url in
let extension = extension_of_resource_type resource_type in
let downloadname =
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
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 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
(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;