On Tue, Feb 09, 2016 at 05:53:55PM +0300, Roman Kagan wrote:
 +and s_nic_model =  Source_rtl8139 | Source_e1000 | Source_virtio_net
[...]
 +and source_video = Source_Cirrus | Source_QXL 
As you know there could be a lot of other input devices.
At the moment the code basically ignores these (but it prints a
warning "unknown [video|network] adapter model %s ignored").  I think
we should only print warnings when that information is useful and/or
actionable for the user, which it isn't in this case.  (I know we
don't always obey that rule right now, but I think it's still a good
rule ...)
So I think a better way to do it would be:
  and s_nic_model =
  | Source_rtl8139 | Source_e1000 | Source_virtio_net
  | Source_other_nic of string
  and source_video =
  | Source_Cirrus | Source_QXL
  | Source_other_video of string
and then change the match code to be something like:
  let model =
    match xpath_string "model/@type" with
    | None -> None
    | Some "virtio" -> Some Source_virtio_net
    | Some "e1000" -> Some Source_e1000
    | Some "rtl8139" -> Some Source_rtl8139
    | Some model -> Some (Source_other_nic model) in
(similarly for video model).  We don't throw away the NIC model if
it's something we can't handle, but we still have special cases for
virtio-net/e1000/rtl8139, so we can handle them in a type safe way.
BTW if you're wondering why I sometimes put the 'in' of 'let .. in'
on
the right hand side of the last line of code, and sometimes on a line
by itself, it's because the rule is: Attach 'in' to the last line if
what you're defining is a non-function.  Put 'in' on a line on its own
if what you're defining is a function.  Above is an example of a
non-function.  An example of a function definition would be:
  let f () =
    ...
  in
Apart from that, the patch looks fine to me.
Rich.
-- 
Richard Jones, Virtualization Group, Red Hat 
http://people.redhat.com/~rjones
Read my programming and virtualization blog: 
http://rwmj.wordpress.com
virt-p2v converts physical machines to virtual machines.  Boot with a
live CD or over the network (PXE) and turn machines into KVM guests.
http://libguestfs.org/virt-v2v