List.rev (List.fold_left (fun acc x -> match kvpair x with Some x -> x :: acc | None -> acc) [] args)
let _ =
- if Array.length Sys.argv < 3 then (
- eprintf "usage: %s <uuid> <cmd> [cmd args]\n" Sys.argv.(0);
- exit 2
- );
- let uuid = Sys.argv.(1) in
+ let using_socket = ref false in
+ let usage_msg = sprintf "usage: %s [--use-socket] <uuid> <cmd> [cmd args]\n" Sys.argv.(0) in
+ let args = ref [] in
+ Arg.parse [
+ ("--use-socket", Arg.Set using_socket, "use socket instead of dbus");
+ ] (fun s -> args := s :: !args) usage_msg;
+ let args = List.rev !args in
- let cmds = Array.to_list (Array.sub Sys.argv 2 (Array.length Sys.argv - 2)) in
- let query =
- match cmds with
- | cmd :: args -> cmd, valid_kvpairs args
- | [] -> eprintf "error: missing query\n"; exit 1
+ let using_socket = !using_socket in
+ let uuid, query =
+ match args with
+ | uuid :: cmd :: args -> uuid, (cmd, valid_kvpairs args)
+ | uuid :: [] -> eprintf "error: missing query\n%s" usage_msg; exit 1
+ | [] -> eprintf "error: missing uuid\n%s" usage_msg; exit 1
in
try
- match Xenvmlib.request ~timeout:60.0 uuid query with
+ match Xenvmlib.request ~using_socket ~timeout:60.0 uuid query with
| Xenvmlib.Ok -> ()
| Xenvmlib.Timeout -> eprintf "timeout\n"; exit 1
| Xenvmlib.Error error -> eprintf "error: %s\n" error; exit 1