+ std::string const binary = flNotDir(Binary);
+ if (binary == "apt" || binary == "apt-config")
+ {
+ _config->CndSet("Binary::apt::APT::Color", true);
+ _config->CndSet("Binary::apt::APT::Cache::Show::Version", 2);
+ _config->CndSet("Binary::apt::APT::Cache::AllVersions", false);
+ _config->CndSet("Binary::apt::APT::Cache::ShowVirtuals", true);
+ _config->CndSet("Binary::apt::APT::Cache::Search::Version", 2);
+ _config->CndSet("Binary::apt::APT::Cache::ShowDependencyType", true);
+ _config->CndSet("Binary::apt::APT::Cache::ShowVersion", true);
+ _config->CndSet("Binary::apt::APT::Get::Upgrade-Allow-New", true);
+ _config->CndSet("Binary::apt::APT::Cmd::Show-Update-Stats", true);
+ _config->CndSet("Binary::apt::DPkg::Progress-Fancy", true);
+ _config->CndSet("Binary::apt::Acquire::AllowInsecureRepositories", false);
+ _config->CndSet("Binary::apt::APT::Keep-Downloaded-Packages", false);
+ }
+
+ _config->Set("Binary", binary);
+ std::string const conf = "Binary::" + binary;
+ _config->MoveSubTree(conf.c_str(), NULL);
+}
+ /*}}}*/
+std::vector<CommandLine::Dispatch> ParseCommandLine(CommandLine &CmdL, APT_CMD const Binary,/*{{{*/
+ Configuration * const * const Cnf, pkgSystem ** const Sys, int const argc, const char *argv[],
+ bool (*ShowHelp)(CommandLine &), std::vector<aptDispatchWithHelp> (*GetCommands)(void))
+{
+ if (Cnf != NULL && pkgInitConfig(**Cnf) == false)
+ {
+ _error->DumpErrors();
+ exit(100);
+ }
+
+ if (likely(argc != 0 && argv[0] != NULL))
+ BinarySpecificConfiguration(argv[0]);
+
+ std::vector<aptDispatchWithHelp> const CmdsWithHelp = GetCommands();
+ std::vector<CommandLine::Dispatch> Cmds;
+ if (CmdsWithHelp.empty() == false)
+ {
+ CommandLine::Dispatch const help = { "help", [](CommandLine &){return false;} };
+ Cmds.push_back(std::move(help));
+ }
+ for (auto const& cmd : CmdsWithHelp)
+ Cmds.push_back({cmd.Match, cmd.Handler});
+
+ // Args running out of scope invalidates the pointer stored in CmdL,
+ // but we don't use the pointer after this function, so we ignore
+ // this problem for now and figure something out if we have to.
+ std::vector<CommandLine::Args> Args;
+ if (Cmds.empty() == false && Cmds[0].Handler != nullptr)
+ Args = getCommandArgs(Binary, CommandLine::GetCommand(Cmds.data(), argc, argv));
+ else
+ Args = getCommandArgs(Binary, nullptr);
+ CmdL = CommandLine(Args.data(), _config);
+
+ if (CmdL.Parse(argc,argv) == false ||