]> matita.cs.unibo.it Git - helm.git/commitdiff
- added comments
authorStefano Zacchiroli <zack@upsilon.cc>
Fri, 27 Dec 2002 10:48:39 +0000 (10:48 +0000)
committerStefano Zacchiroli <zack@upsilon.cc>
Fri, 27 Dec 2002 10:48:39 +0000 (10:48 +0000)
- moved here http_get

helm/http_getter/http_getter_misc.ml
helm/http_getter/http_getter_misc.mli

index 1bd5522134448245e3865297b20f45bbb117354d..036e05996819f9c4bb4610292c0ecd08265901d1 100644 (file)
@@ -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
+
index bb99827de0ebd15e66f8ef2bbcbecbd88e42ddf0..6086b8d5a598304069bcd5e11cb7060affa5ae07 100644 (file)
  *  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
+