1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
/* ######################################################################
apt - CLI UI for apt
Returns 100 on failure, 0 on success.
##################################################################### */
/*}}}*/
// Include Files /*{{{*/
#include <config.h>
#include <apt-pkg/cmndline.h>
#include <apt-pkg/configuration.h>
#include <apt-pkg/error.h>
#include <apt-pkg/init.h>
#include <apt-pkg/pkgsystem.h>
#include <apt-pkg/solver3.h>
#include <apt-pkg/strutl.h>
#include <apt-private/private-cmndline.h>
#include <apt-private/private-depends.h>
#include <apt-private/private-download.h>
#include <apt-private/private-history.h>
#include <apt-private/private-install.h>
#include <apt-private/private-list.h>
#include <apt-private/private-main.h>
#include <apt-private/private-moo.h>
#include <apt-private/private-output.h>
#include <apt-private/private-search.h>
#include <apt-private/private-show.h>
#include <apt-private/private-source.h>
#include <apt-private/private-sources.h>
#include <apt-private/private-update.h>
#include <apt-private/private-upgrade.h>
#include <iostream>
#include <vector>
#include <unistd.h>
#include <apti18n.h>
/*}}}*/
static bool ShowHelp(CommandLine &) /*{{{*/
{
std::cout <<
_("Usage: apt [options] command\n"
"\n"
"apt is a commandline package manager and provides commands for\n"
"searching and managing as well as querying information about packages.\n"
"It provides the same functionality as the specialized APT tools,\n"
"like apt-get and apt-cache, but enables options more suitable for\n"
"interactive use by default.\n");
return true;
}
/*}}}*/
static bool DoWhy(CommandLine &CmdL) /*{{{*/
{
pkgCacheFile CacheFile;
APT::PackageList pkgset = APT::PackageList::FromCommandLine(CacheFile, CmdL.FileList + 1);
bool const decision = strcmp(CmdL.FileList[0], "why") == 0;
if (pkgset.size() != 1)
return _error->PendingError() ? false : _error->Error("Only a single argument is supported at this time.");
if (unlikely(not CacheFile.BuildDepCache()))
return false;
for (auto pkg : pkgset)
std::cout << APT::Solver::DependencySolver::InternalCliWhy(CacheFile, pkg, decision) << std::flush;
return not _error->PendingError();
}
static std::vector<aptDispatchWithHelp> GetCommands() /*{{{*/
{
// advanced commands are left undocumented on purpose
return {
// query
{"list", &DoList, _("list packages based on package names")},
{"search", &DoSearch, _("search in package descriptions")},
{"show", &ShowPackage, _("show package details")},
// package stuff
{"install", &DoInstall, _("install packages")},
{"reinstall", &DoInstall, _("reinstall packages")},
{"remove", &DoInstall, _("remove packages")},
{"autoremove", &DoInstall, _("automatically remove all unused packages")},
{"auto-remove", &DoInstall, nullptr},
{"autopurge", &DoInstall, nullptr},
{"purge", &DoInstall, nullptr},
// system wide stuff
{"update", &DoUpdate, _("update list of available packages")},
{"upgrade", &DoUpgrade, _("upgrade the system by installing/upgrading packages")},
{"full-upgrade", &DoDistUpgrade, _("upgrade the system by removing/installing/upgrading packages")},
// history stuff
{"history-list", &DoHistoryList, _("show list of history")},
{"history-info", &DoHistoryInfo, _("show info on specific transactions")},
{"history-redo", &DoHistoryRedo, _("redo transactions")},
{"history-undo", &DoHistoryUndo, _("undo transactions")},
{"history-rollback", &DoHistoryRollback, _("rollback transactions")},
// misc
{"edit-sources", &EditSources, _("edit the source information file")},
{"modernize-sources", &ModernizeSources, _("modernize .list files to .sources files")},
{"moo", &DoMoo, nullptr},
{"satisfy", &DoBuildDep, _("satisfy dependency strings")},
{"why", &DoWhy, _("produce a reason trace for the current state of the package")},
{"why-not", &DoWhy, _("produce a reason trace for the current state of the package")},
// for compat with muscle memory
{"dist-upgrade", &DoDistUpgrade, nullptr},
{"showsrc", &ShowSrcPackage, nullptr},
{"depends", &Depends, nullptr},
{"rdepends", &RDepends, nullptr},
{"policy", &Policy, nullptr},
{"build-dep", &DoBuildDep, nullptr},
{"clean", &DoClean, nullptr},
{"distclean", &DoDistClean, nullptr},
{"dist-clean", &DoDistClean, nullptr},
{"autoclean", &DoAutoClean, nullptr},
{"auto-clean", &DoAutoClean, nullptr},
{"source", &DoSource, nullptr},
{"download", &DoDownload, nullptr},
{"changelog", &DoChangelog, nullptr},
{"info", &ShowPackage, nullptr},
{nullptr, nullptr, nullptr}};
}
/*}}}*/
int main(int argc, const char *argv[]) /*{{{*/
{
CommandLine CmdL;
auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT, &_config, &_system, argc, argv, &ShowHelp, &GetCommands);
int const quiet = _config->FindI("quiet", 0);
if (quiet == 2)
{
_config->CndSet("quiet::NoProgress", true);
_config->Set("quiet", 1);
}
InitSignals();
InitOutput();
CheckIfCalledByScript(argc, argv);
CheckIfSimulateMode(CmdL);
return DispatchCommandLine(CmdL, Cmds);
}
/*}}}*/
|