X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=sparsify%2Fsparsify.ml;h=4e438ac2adbf03e1501eb07993a8823ad265048e;hb=6ccae55ddcf0c08cd1b1cdbc07afeed043ad410d;hp=4782983dcc82bad1f6e742ad0166ab440d089fbd;hpb=b0605f265be3f501930516ff95deab2910ced3ac;p=libguestfs.git diff --git a/sparsify/sparsify.ml b/sparsify/sparsify.ml index 4782983..4e438ac 100644 --- a/sparsify/sparsify.ml +++ b/sparsify/sparsify.ml @@ -28,8 +28,8 @@ let () = Random.self_init () (* Command line argument parsing. *) let prog = Filename.basename Sys.executable_name -let indisk, outdisk, convert, format, ignores, machine_readable, quiet, - verbose, trace = +let indisk, outdisk, compress, convert, format, ignores, machine_readable, + option, quiet, verbose, trace = let display_version () = let g = new G.guestfs () in let version = g#version () in @@ -40,19 +40,23 @@ let indisk, outdisk, convert, format, ignores, machine_readable, quiet, let add xs s = xs := s :: !xs in + let compress = ref false in let convert = ref "" in let format = ref "" in let ignores = ref [] in let machine_readable = ref false in + let option = ref "" in let quiet = ref false in let verbose = ref false in let trace = ref false in let argspec = Arg.align [ + "--compress", Arg.Set compress, " Compressed output format"; "--convert", Arg.Set_string convert, "format Format of output disk (default: same as input)"; "--format", Arg.Set_string format, "format Format of input disk"; "--ignore", Arg.String (add ignores), "fs Ignore filesystem"; "--machine-readable", Arg.Set machine_readable, " Make output machine readable"; + "-o", Arg.Set_string option, "option Add qemu-img options"; "-q", Arg.Set quiet, " Quiet output"; "--quiet", Arg.Set quiet, " -\"-"; "-v", Arg.Set verbose, " Enable debugging messages"; @@ -76,10 +80,12 @@ read the man page virt-sparsify(1). Arg.parse argspec anon_fun usage_msg; (* Dereference the rest of the args. *) + let compress = !compress in let convert = match !convert with "" -> None | str -> Some str in let format = match !format with "" -> None | str -> Some str in let ignores = List.rev !ignores in let machine_readable = !machine_readable in + let option = match !option with "" -> None | str -> Some str in let quiet = !quiet in let verbose = !verbose in let trace = !trace in @@ -122,8 +128,8 @@ read the man page virt-sparsify(1). if contains_comma then error "input filename '%s' contains a comma; qemu-img command line syntax prevents us from using such an image" indisk; - indisk, outdisk, convert, format, ignores, machine_readable, quiet, - verbose, trace + indisk, outdisk, compress, convert, format, ignores, machine_readable, + option, quiet, verbose, trace let () = if not quiet then @@ -274,6 +280,8 @@ let output_format = ); if string_prefix line "QEMU QCOW Image (v2)" then "qcow2" + else if string_find line "VirtualBox" >= 0 then + "vdi" else "raw" (* XXX guess *) @@ -285,10 +293,14 @@ let () = printf "Copy to destination and make sparse ...\n%!"; let cmd = - sprintf "qemu-img convert -f qcow2 -O %s %s %s" + sprintf "qemu-img convert -f qcow2 -O %s%s%s %s %s" (Filename.quote output_format) + (if compress then " -c" else "") + (match option with + | None -> "" + | Some option -> " -o " ^ Filename.quote option) (Filename.quote overlaydisk) (Filename.quote outdisk) in - if verbose then +(* if verbose then*) printf "%s\n%!" cmd; if Sys.command cmd <> 0 then error "external command failed: %s" cmd