let parse_request_aptitude s =
if not (String.exists s "aptitude") then fatal "Not a valid aptitude command" ;
let s = String.slice ~first:((String.find s "aptitude")) 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 _ -> ()), "");
("--full-resolver", Arg.Unit (fun _ -> ()), "");
("--safe-resolver", Arg.Unit (fun _ -> ()), "");
("-f", Arg.Unit (fun _ -> ()), "");
("-r", Arg.Unit (fun _ -> ()), "");
("--with-recommends", Arg.Unit (fun _ -> ()), "");
("-R", Arg.Unit (fun _ -> ()), "");
("--without-recommends", 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"] | ["safe-upgrade"] | ["dist-upgrade"] -> Upgrade(!suite)
|["full-upgrade"] -> DistUpgrade(!suite)
|_ -> fatal "Bad aptitude request '%s'" s
end