From b077aa16b12755c2bace508154773efc9fa2320c Mon Sep 17 00:00:00 2001 From: Stefano Zacchiroli Date: Tue, 7 Jan 2003 14:57:41 +0000 Subject: [PATCH] - added "cp", a wrapper around omonymous command - added support for "file://" scheme to "wget" wrapper --- helm/http_getter/http_getter_misc.ml | 32 ++++++++++++++++++++++----- helm/http_getter/http_getter_misc.mli | 5 ++++- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/helm/http_getter/http_getter_misc.ml b/helm/http_getter/http_getter_misc.ml index ab517e20e..880ddd46e 100644 --- a/helm/http_getter/http_getter_misc.ml +++ b/helm/http_getter/http_getter_misc.ml @@ -46,14 +46,34 @@ let hashtbl_sorted_fold f tbl init = in List.fold_left (fun acc k -> f k (Hashtbl.find tbl k) acc) init sorted_keys -let wget ?output url = - let flags = - (match output with Some file -> ["-O"; file] | None -> []) @ [url] - in - debug_print ("wget " ^ String.concat " " flags); +let cp src dst = Shell.call ~stdout:Shell.to_dev_null ~stderr:Shell.to_dev_null - [Shell.cmd "wget" flags] + [Shell.cmd "cp" [src; dst]] + +let file_scheme_RE = Pcre.regexp "^file://" +let wget ?output url = + let use_wget () = + let flags = + (match output with Some file -> ["-O"; file] | None -> []) @ [url] + in + debug_print ("wget " ^ String.concat " " flags); + Shell.call + ~stdout:Shell.to_dev_null ~stderr:Shell.to_dev_null + [Shell.cmd "wget" flags] + in + if Pcre.pmatch ~rex:file_scheme_RE url then begin (* file:// URL *) + let src_fname = Pcre.replace ~rex:file_scheme_RE url in + match output with + | Some dst_fname -> cp src_fname dst_fname + | None -> + let dst_fname = Filename.basename src_fname in + if src_fname <> dst_fname then + cp src_fname dst_fname + else (* src and dst are the same: do nothing *) + () + end else (* other URL, pass it to wget *) + use_wget () (* stderr shown as usual *) let gzip ?(keep = false) fname = diff --git a/helm/http_getter/http_getter_misc.mli b/helm/http_getter/http_getter_misc.mli index aba2a9a01..d9f8ff873 100644 --- a/helm/http_getter/http_getter_misc.mli +++ b/helm/http_getter/http_getter_misc.mli @@ -35,8 +35,11 @@ val iter_file : (string -> unit) -> string -> unit val hashtbl_sorted_fold : ('a -> 'b -> 'c -> 'c) -> ('a, 'b) Hashtbl.t -> 'c -> 'c + (** cp frontend *) +val cp: string -> string -> unit (** wget frontend, if output is given it is the destination file, otherwise - standard wget rules are used *) + standard wget rules are used. Additionally this function support also the + "file://" scheme for file system addressing *) val wget: ?output: string -> string -> unit (** gzip frontend, if keep = true original file will be kept *) val gzip: ?keep: bool -> string -> unit -- 2.39.2