On Wed, Mar 18, 2015 at 05:20:07PM +0100, Maros Zatko wrote: > Partially downloaded file is not deleted on exit anymore. > There is a check for partially downloaded image in cache directory > based on its name. When found, download_to crafts appropriate > options to continue its download. > --- > builder/downloader.ml | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > > diff --git a/builder/downloader.ml b/builder/downloader.ml > index 8a23bdc..6e19ee4 100644 > --- a/builder/downloader.ml > +++ b/builder/downloader.ml > @@ -65,11 +65,11 @@ let rec download ~prog t ?template ?progress_bar ?(proxy > = SystemProxy) uri = > * If not, download it. > *) > if not (Sys.file_exists filename) then > - download_to ~prog t ?progress_bar ~proxy uri filename; > + download_to ~prog t ?progress_bar ?continue:(Some true) ~proxy uri > filename;
To expand on what Pino said: ?foo arguments are passed as options, ie. None or Some .. The function has (hidden, generated by the compiler) code which does effectively: let foo = match ?foo with None -> (* default value *) | Some x -> x in When calling if you write the argument as ~foo:true then the compiler automatically translates that to 'Some true'. > (filename, false) > > -and download_to ~prog t ?(progress_bar = false) ~proxy uri filename = > +and download_to ~prog t ?(progress_bar = false) ?(continue = false) ~proxy > uri filename = > let parseduri = > try URI.parse_uri uri > with Invalid_argument "URI.parse_uri" -> > @@ -82,7 +82,6 @@ and download_to ~prog t ?(progress_bar = false) ~proxy uri > filename = > * atomically rename it to the final filename. > *) > let filename_new = filename ^ "." ^ string_random8 () in > - unlink_on_exit filename_new; > > (match parseduri.URI.protocol with > | "file" -> > @@ -115,11 +114,20 @@ and download_to ~prog t ?(progress_bar = false) ~proxy > uri filename = > if bad_status_code status_code then > error (f_"failed to download %s: HTTP status code %s") uri status_code; > > + let cmd = sprintf "ls %s.* 2>/dev/null" filename in > + let lines = if continue > + then external_command ~prog ?ignore_error:(Some true) cmd > + else [] in > + let filename_new, continue_download = match List.length lines with > + | 0 -> filename_new, "" > + | _ -> List.hd lines, " -C -" in > + > (* Now download the file. *) > - let cmd = sprintf "%s%s%s -g -o %s %s" > + let cmd = sprintf "%s%s%s%s -g -o %s %s" > outenv > t.curl > (if t.verbose then "" else if progress_bar then " -#" else " -s -S") > + continue_download > (quote filename_new) (quote uri) in > if t.verbose then printf "%s\n%!" cmd; > let r = Sys.command cmd in I can't say I'm very happy to have partial downloads lying around in the cache directory. Let's see what Pino thinks of the updated patch however. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com Fedora Windows cross-compiler. Compile Windows programs, test, and build Windows installers. Over 100 libraries supported. http://fedoraproject.org/wiki/MinGW _______________________________________________ Libguestfs mailing list [email protected] https://www.redhat.com/mailman/listinfo/libguestfs
