X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;ds=sidebyside;f=helm%2Fhttp_getter%2Fhttp_getter_misc.ml;h=1bd5522134448245e3865297b20f45bbb117354d;hb=d599c257fed6a37da72494676ed24315a6d8b2fb;hp=d40fbf4f6f0dea5b358f2c572daa65a0c7e80014;hpb=12e7928b2ce2113d5ac43d453026d0443f58c5e4;p=helm.git diff --git a/helm/http_getter/http_getter_misc.ml b/helm/http_getter/http_getter_misc.ml index d40fbf4f6..1bd552213 100644 --- a/helm/http_getter/http_getter_misc.ml +++ b/helm/http_getter/http_getter_misc.ml @@ -24,6 +24,8 @@ * http://cs.unibo.it/helm/. *) +open Printf;; + let fold_file f init fname = let inchan = open_in fname in let rec fold_lines' value = @@ -43,3 +45,47 @@ 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 + 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 *) + Shell.call + ~stdout:(Shell.to_file (fname ^ ".gz")) + [Shell.cmd "gzip" ["-f"; "-c"; fname]] + else (* don't keep original file *) + Shell.call [Shell.cmd "gzip" ["-f"; fname]] + + (* 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 *) + Shell.call + ~stdout:(Shell.to_file basename) + [Shell.cmd "gunzip" ["-f"; "-c"; fname]] + else (* don't keep original file *) + Shell.call [Shell.cmd "gunzip" ["-f"; fname]] + +let tempfile () = + let buf = Buffer.create 28 in (* strlen("/tmp/fileSzb3Mw_http_getter") *) + Shell.call + ~stdout:(Shell.to_buffer buf) + [Shell.cmd "tempfile" ["--suffix=_http_getter"]]; + Pcre.replace ~pat:"\n" (Buffer.contents buf) + +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 +