let parse_request_apt s =
if not (String.exists s "apt-get") then fatal "Not a valid apt-get command" ;
let s = String.slice ~first:((String.find s "apt-get")) s in
let suite = ref None in
let options = [
("-t", Arg.String (fun l -> suite := Some(l)), "");
("-s", Arg.Unit (fun _ -> ()), "");
("-y", Arg.Unit (fun _ -> ()), "");
("-v", Arg.Unit (fun _ -> ()), "");
("-f", Arg.Unit (fun _ -> ()), "");
("-o", Arg.String (fun _ -> ()), "");
("--solver", Arg.String (fun _ -> ()), "");
("--no-install-recommends", Arg.Unit (fun _ -> ()), "");
("--install-recommends", Arg.Unit (fun _ -> ()), "");
("--no-upgrade", Arg.Unit (fun _ -> ()), "");
("--no-remove", Arg.Unit (fun _ -> ()), "");
]
in
let reqlist = ref [] in
let anon s = reqlist := s :: !reqlist in
begin
begin try Arg.parse_argv ~current:(ref 0) (Array.of_list (Pcre.split ~rex:blank_regexp s)) options anon ""
with Arg.Bad s -> fatal "%s" s end ;
match List.rev !reqlist with
|"install" :: tl -> Install(List.map (parse_pkg_req !suite) tl)
|"remove" :: tl -> Remove(List.map parse_req tl)
|["upgrade"] -> Upgrade(!suite)
|["dist-upgrade"] -> DistUpgrade(!suite)
|_ -> fatal "Bad apt request '%s'" s
end