From c3e872308eb13fac1217091154999ea53fb957bf Mon Sep 17 00:00:00 2001 From: Stefano Zacchiroli Date: Fri, 27 Dec 2002 10:48:39 +0000 Subject: [PATCH] - added comments - moved here http_get --- helm/http_getter/http_getter_misc.ml | 31 +++++++++++++++++++++------ helm/http_getter/http_getter_misc.mli | 18 ++++++++++++++++ 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/helm/http_getter/http_getter_misc.ml b/helm/http_getter/http_getter_misc.ml index 1bd552213..036e05996 100644 --- a/helm/http_getter/http_getter_misc.ml +++ b/helm/http_getter/http_getter_misc.ml @@ -24,6 +24,7 @@ * http://cs.unibo.it/helm/. *) +open Http_getter_debugger;; open Printf;; let fold_file f init fname = @@ -49,33 +50,37 @@ let wget ?output url = 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] - (* TODO gzip and gunzip create executables file, but umask seems to be - correctly inherited from the shell .... boh *) - (* stderr shown as usual *) let gzip ?(keep = false) fname = - if keep then (* keep original file *) + if keep then begin (* keep original file *) + debug_print ("gzip -f -c " ^ fname); Shell.call ~stdout:(Shell.to_file (fname ^ ".gz")) [Shell.cmd "gzip" ["-f"; "-c"; fname]] - else (* don't keep original file *) + end else begin (* don't keep original file *) + debug_print ("gzip -f " ^ fname); Shell.call [Shell.cmd "gzip" ["-f"; fname]] + end (* stderr shown as usual *) let gunzip ?(keep = false) fname = if not (Pcre.pmatch ~pat:"\\.gz$" fname) then failwith "gunzip: source file doesn't end with '.gz'"; let basename = Pcre.replace ~pat:"\\.gz$" fname in - if keep then (* keep original file *) + if keep then begin (* keep original file *) + debug_print ("gunzip -f -c " ^ fname); Shell.call ~stdout:(Shell.to_file basename) [Shell.cmd "gunzip" ["-f"; "-c"; fname]] - else (* don't keep original file *) + end else begin (* don't keep original file *) + debug_print ("gunzip -f " ^ fname); Shell.call [Shell.cmd "gunzip" ["-f"; fname]] + end let tempfile () = let buf = Buffer.create 28 in (* strlen("/tmp/fileSzb3Mw_http_getter") *) @@ -84,8 +89,20 @@ let tempfile () = [Shell.cmd "tempfile" ["--suffix=_http_getter"]]; Pcre.replace ~pat:"\n" (Buffer.contents buf) +let mkdir ?(parents = false) dirname = + if not (Sys.file_exists dirname) then begin + let flags = if parents then ["-p"; dirname] else [dirname] in + debug_print ("mkdir " ^ String.concat " " flags); + Shell.call [Shell.cmd "mkdir" flags] + end + let string_of_proc_status = function | Unix.WEXITED code -> sprintf "[Exited: %d]" code | Unix.WSIGNALED sg -> sprintf "[Killed: %d]" sg | Unix.WSTOPPED sg -> sprintf "[Stopped: %d]" sg +let http_get url = + try + Some (Http_client.Convenience.http_get url) + with Http_client.Http_error (code, _) -> None + diff --git a/helm/http_getter/http_getter_misc.mli b/helm/http_getter/http_getter_misc.mli index bb99827de..6086b8d5a 100644 --- a/helm/http_getter/http_getter_misc.mli +++ b/helm/http_getter/http_getter_misc.mli @@ -24,17 +24,35 @@ * http://cs.unibo.it/helm/. *) + (** "fold_left" like function on file lines, trailing newline is not passed to + the given function *) val fold_file : ('a -> string -> 'a) -> 'a -> string -> 'a + (* "iter" like function on file lines, trailing newline is not passed to the + given function *) val iter_file : (string -> unit) -> string -> unit (** like Hashtbl.fold but keys are processed ordered *) val hashtbl_sorted_fold : ('a -> 'b -> 'c -> 'c) -> ('a, 'b) Hashtbl.t -> 'c -> 'c + (** wget frontend, if output is given it is the destination file, otherwise + standard wget rules are used *) val wget: ?output: string -> string -> unit + (** gzip frontend, if keep = true original file will be kept *) val gzip: ?keep: bool -> string -> unit + (** gunzip frontend, if keep = true original file will be kept *) val gunzip: ?keep: bool -> string -> unit + (** tempfile frontend, return the name of created file. A special purpose + suffix is used (actually "_http_getter" *) val tempfile: unit -> string + (** mkdir frontend, if parents = true also parent directories will be created. + If the given directory already exists doesn't act *) +val mkdir: ?parents: bool -> string -> unit + (** pretty printer for Unix.process_status values *) val string_of_proc_status : Unix.process_status -> string + (** raw HTTP downloader, return Some the contents of downloaded resource or + None if an error occured while downlaoding *) +val http_get: string -> string option + -- 2.39.2