[Libguestfs] [PATCH v2 15/18] sparsify: Refactor command line parsing to pass back a mode.

Richard W.M. Jones rjones at redhat.com
Tue Mar 11 23:13:58 UTC 2014


This is just code motion, but sets the ground-work for adding a second
mode (in-place image modification).
---
 sparsify/cmdline.ml  | 10 +++++++---
 sparsify/sparsify.ml | 24 ++++++++++++++++--------
 2 files changed, 23 insertions(+), 11 deletions(-)

diff --git a/sparsify/cmdline.ml b/sparsify/cmdline.ml
index d803ab1..b714a9e 100644
--- a/sparsify/cmdline.ml
+++ b/sparsify/cmdline.ml
@@ -26,6 +26,10 @@ open Common_utils
 let prog = Filename.basename Sys.executable_name
 let error fs = error ~prog fs
 
+type mode_t =
+  Mode_copying of string * check_t * bool * string option * string option
+and check_t = [`Ignore|`Continue|`Warn|`Fail]
+
 let parse_cmdline () =
   let display_version () =
     printf "virt-sparsify %s\n" Config.package_version;
@@ -155,6 +159,6 @@ read the man page virt-sparsify(1).
     error (f_"output '%s' cannot be a character device, it must be a regular file")
       outdisk;
 
-  indisk, outdisk, check_tmpdir, compress, convert,
-    debug_gc, format, ignores, machine_readable,
-    option, quiet, verbose, trace, zeroes
+  indisk, debug_gc, format, ignores, machine_readable,
+    quiet, verbose, trace, zeroes,
+    Mode_copying (outdisk, check_tmpdir, compress, convert, option)
diff --git a/sparsify/sparsify.ml b/sparsify/sparsify.ml
index c9692d4..0091d95 100644
--- a/sparsify/sparsify.ml
+++ b/sparsify/sparsify.ml
@@ -31,12 +31,23 @@ external statvfs_free_space : string -> int64 =
 
 let () = Random.self_init ()
 
-let main () =
-  let indisk, outdisk, check_tmpdir, compress, convert, debug_gc,
-    format, ignores, machine_readable,
-    option, quiet, verbose, trace, zeroes =
+let rec main () =
+  let indisk, debug_gc, format, ignores, machine_readable,
+    quiet, verbose, trace, zeroes, mode =
     parse_cmdline () in
 
+  (match mode with
+  | Mode_copying (outdisk, check_tmpdir, compress, convert, option) ->
+    copying indisk outdisk check_tmpdir compress convert
+      format ignores machine_readable option quiet verbose trace zeroes
+  );
+
+  if debug_gc then
+    Gc.compact ()
+
+and copying indisk outdisk check_tmpdir compress convert
+    format ignores machine_readable option quiet verbose trace zeroes =
+
   (* Once we have got past argument parsing and start to create
    * temporary files (including the potentially massive overlay file), we
    * need to catch SIGINT (^C) and exit cleanly so the temporary file
@@ -274,10 +285,7 @@ You can ignore this warning or change it to a hard failure using the
   if not quiet then (
     print_newline ();
     wrap (s_"Sparsify operation completed with no errors.  Before deleting the old disk, carefully check that the target disk boots and works correctly.\n");
-  );
-
-  if debug_gc then
-    Gc.compact ()
+  )
 
 let () =
   try main ()
-- 
1.8.5.3




More information about the Libguestfs mailing list