Rewrite virt-resize in OCaml.
authorRichard W.M. Jones <rjones@redhat.com>
Fri, 8 Apr 2011 13:07:26 +0000 (14:07 +0100)
committerRichard W.M. Jones <rjones@redhat.com>
Sat, 9 Apr 2011 13:28:22 +0000 (14:28 +0100)
commitca03635a4c83afbe9b51fe846a8b3d5361462a90
treeb7faa804b620854f9b8ef982f91238221819c4bb
parent3a84e0784e1e3ab7b56850d0f8c9aa42f1ae3da1
Rewrite virt-resize in OCaml.

This is a fairly straightforward translation of Perl virt-resize into
OCaml.  It is bug-for-bug and feature-for-feature identical to the
Perl version, except as noted below.

The motivation is to have a more solid, high-level, statically safe
compiled language to go forwards with fixing some of the harder bugs
in virt-resize.  In particular contracts between different parts of
the program are now handled by statically typed structures checked at
compile time, instead of the very ad-hoc unchecked hash tables used by
the Perl version.

OCaml and the ocaml-pcre library (Perl-Compatible Regular Expressions
bindings for OCaml) are required.

Extra features in this version:

- 32 bit hosts are now supported.

- We try hard to handle the case where the target disk is not "clean"
  (ie. all zeroes).  It usually works for this case, whereas the
  previous version would usually fail.  However it is still
  recommended that the system administrator creates a fresh blank disk
  for the target before running the program.

- User messages are a bit more verbose and helpful.  You can turn
  these off with the -q (--quiet) option.

There is one lost feature:

- Ability to specify >= T (terabytes) sizes in command line size
  expressions has been removed.  This probably didn't work in the Perl
  version.

Other differences:

- The first partition on the target is no longer aligned; instead we
  place it at the same sector as on the source.  I suspect that
  aligning it was causing the bootloader failures.

- Because it's easier, we do more sanity checking on the source disk.
  This might lead to more failures, but they'd be failures you'd want
  to know about.

- The order in which operations are performed has been changed to make
  it more logical.  The user should not notice any functional
  difference, but debug messages will be quite a bit different.

- virt-resize is a compiled binary, not a script.
15 files changed:
.gitignore
Makefile.am
README
configure.ac
po/POTFILES.in
resize/.depend [new file with mode: 0644]
resize/Makefile.am [new file with mode: 0644]
resize/progress.ml [new file with mode: 0644]
resize/resize.ml [new file with mode: 0644]
resize/run-resize-locally [new file with mode: 0755]
resize/test-virt-resize.sh [moved from tools/test-virt-resize.sh with 52% similarity]
resize/utils.ml [new file with mode: 0644]
resize/virt-resize.pod [new file with mode: 0644]
tools/Makefile.am
tools/virt-resize [deleted file]