summaryrefslogtreecommitdiff
path: root/cmdline
diff options
context:
space:
mode:
Diffstat (limited to 'cmdline')
-rw-r--r--cmdline/apt-config.cc10
-rw-r--r--cmdline/apt-extracttemplates.cc6
-rw-r--r--cmdline/apt-get.cc116
-rw-r--r--cmdline/apt-internal-solver.cc15
-rwxr-xr-xcmdline/apt-key3
-rw-r--r--cmdline/apt-mark.cc2
6 files changed, 107 insertions, 45 deletions
diff --git a/cmdline/apt-config.cc b/cmdline/apt-config.cc
index 79ae944df..397ce32df 100644
--- a/cmdline/apt-config.cc
+++ b/cmdline/apt-config.cc
@@ -63,7 +63,13 @@ bool DoShell(CommandLine &CmdL)
/* */
bool DoDump(CommandLine &CmdL)
{
- _config->Dump(cout);
+ bool const empty = _config->FindB("APT::Config::Dump::EmptyValue", true);
+ std::string const format = _config->Find("APT::Config::Dump::Format", "%f \"%v\";\n");
+ if (CmdL.FileSize() == 1)
+ _config->Dump(cout, NULL, format.c_str(), empty);
+ else
+ for (const char **I = CmdL.FileList + 1; *I != 0; ++I)
+ _config->Dump(cout, *I, format.c_str(), empty);
return true;
}
/*}}}*/
@@ -100,6 +106,8 @@ int main(int argc,const char *argv[]) /*{{{*/
{'v',"version","version",0},
{'c',"config-file",0,CommandLine::ConfigFile},
{'o',"option",0,CommandLine::ArbItem},
+ {0,"empty","APT::Config::Dump::EmptyValue",CommandLine::Boolean},
+ {0,"format","APT::Config::Dump::Format",CommandLine::HasArg},
{0,0,0,0}};
CommandLine::Dispatch Cmds[] = {{"shell",&DoShell},
{"dump",&DoDump},
diff --git a/cmdline/apt-extracttemplates.cc b/cmdline/apt-extracttemplates.cc
index 60efafba5..8fe15fdf9 100644
--- a/cmdline/apt-extracttemplates.cc
+++ b/cmdline/apt-extracttemplates.cc
@@ -36,11 +36,13 @@
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
+#include <locale.h>
+
#include <fstream>
-#include <locale.h>
-#include <apti18n.h>
#include "apt-extracttemplates.h"
+
+#include <apti18n.h>
/*}}}*/
using namespace std;
diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc
index 4e6cc32de..d4c7f4200 100644
--- a/cmdline/apt-get.cc
+++ b/cmdline/apt-get.cc
@@ -254,6 +254,9 @@ bool ShowList(ostream &out,string Title,string List,string VersionsList)
*/
void ShowBroken(ostream &out,CacheFile &Cache,bool Now)
{
+ if (Cache->BrokenCount() == 0)
+ return;
+
out << _("The following packages have unmet dependencies:") << endl;
for (unsigned J = 0; J < Cache->Head().PackageCount; J++)
{
@@ -1679,10 +1682,13 @@ bool DoUpdate(CommandLine &CmdL)
ListUpdate(Stat, *List);
// Rebuild the cache.
- pkgCacheFile::RemoveCaches();
- if (Cache.BuildCaches() == false)
- return false;
-
+ if (_config->FindB("pkgCacheFile::Generate", true) == true)
+ {
+ pkgCacheFile::RemoveCaches();
+ if (Cache.BuildCaches() == false)
+ return false;
+ }
+
return true;
}
/*}}}*/
@@ -2356,6 +2362,8 @@ bool DoDownload(CommandLine &CmdL)
pkgRecords Recs(Cache);
pkgSourceList *SrcList = Cache.GetSourceList();
+ bool gotAll = true;
+
for (APT::VersionList::const_iterator Ver = verset.begin();
Ver != verset.end();
++Ver)
@@ -2366,11 +2374,19 @@ bool DoDownload(CommandLine &CmdL)
pkgRecords::Parser &rec=Recs.Lookup(Ver.FileList());
pkgCache::VerFileIterator Vf = Ver.FileList();
if (Vf.end() == true)
- return _error->Error("Can not find VerFile");
+ {
+ _error->Error("Can not find VerFile for %s in version %s", Pkg.FullName().c_str(), Ver.VerStr());
+ gotAll = false;
+ continue;
+ }
pkgCache::PkgFileIterator F = Vf.File();
pkgIndexFile *index;
if(SrcList->FindIndex(F, index) == false)
- return _error->Error("FindIndex failed");
+ {
+ _error->Error(_("Can't find a source to download version '%s' of '%s'"), Ver.VerStr(), Pkg.FullName().c_str());
+ gotAll = false;
+ continue;
+ }
string uri = index->ArchiveURI(rec.FileName());
strprintf(descr, _("Downloading %s %s"), Pkg.Name(), Ver.VerStr());
// get the most appropriate hash
@@ -2386,6 +2402,8 @@ bool DoDownload(CommandLine &CmdL)
// get the file
new pkgAcqFile(&Fetcher, uri, hash.toStr(), (*Ver)->Size, descr, Pkg.Name(), ".");
}
+ if (gotAll == false)
+ return false;
// Just print out the uris and exit if the --print-uris flag was used
if (_config->FindB("APT::Get::Print-URIs") == true)
@@ -2493,7 +2511,7 @@ bool DoSource(CommandLine &CmdL)
Src.c_str(), vcs.c_str(), uri.c_str());
if(vcs == "Bzr")
ioprintf(c1out,_("Please use:\n"
- "bzr get %s\n"
+ "bzr branch %s\n"
"to retrieve the latest (possibly unreleased) "
"updates to the package.\n"),
uri.c_str());
@@ -2786,8 +2804,18 @@ bool DoBuildDep(CommandLine &CmdL)
// Process the build-dependencies
vector<pkgSrcRecords::Parser::BuildDepRec> BuildDeps;
- if (Last->BuildDepends(BuildDeps, _config->FindB("APT::Get::Arch-Only", false), StripMultiArch) == false)
- return _error->Error(_("Unable to get build-dependency information for %s"),Src.c_str());
+ // FIXME: Can't specify architecture to use for [wildcard] matching, so switch default arch temporary
+ if (hostArch.empty() == false)
+ {
+ std::string nativeArch = _config->Find("APT::Architecture");
+ _config->Set("APT::Architecture", hostArch);
+ bool Success = Last->BuildDepends(BuildDeps, _config->FindB("APT::Get::Arch-Only", false), StripMultiArch);
+ _config->Set("APT::Architecture", nativeArch);
+ if (Success == false)
+ return _error->Error(_("Unable to get build-dependency information for %s"),Src.c_str());
+ }
+ else if (Last->BuildDepends(BuildDeps, _config->FindB("APT::Get::Arch-Only", false), StripMultiArch) == false)
+ return _error->Error(_("Unable to get build-dependency information for %s"),Src.c_str());
// Also ensure that build-essential packages are present
Configuration::Item const *Opts = _config->Tree("APT::Build-Essential");
@@ -2873,39 +2901,48 @@ bool DoBuildDep(CommandLine &CmdL)
else
Pkg = Cache->FindPkg(D->Package);
- // We need to decide if host or build arch, so find a version we can look at
- pkgCache::VerIterator Ver;
-
// a bad version either is invalid or doesn't satify dependency
- #define BADVER(Ver) Ver.end() == true || \
- (Ver.end() == false && D->Version.empty() == false && \
- Cache->VS().CheckDep(Ver.VerStr(),D->Op,D->Version.c_str()) == false)
+ #define BADVER(Ver) (Ver.end() == true || \
+ (D->Version.empty() == false && \
+ Cache->VS().CheckDep(Ver.VerStr(),D->Op,D->Version.c_str()) == false))
+ APT::VersionList verlist;
if (Pkg.end() == false)
{
- Ver = (*Cache)[Pkg].InstVerIter(*Cache);
- if (BADVER(Ver))
- Ver = (*Cache)[Pkg].CandidateVerIter(*Cache);
+ pkgCache::VerIterator Ver = (*Cache)[Pkg].InstVerIter(*Cache);
+ if (BADVER(Ver) == false)
+ verlist.insert(Ver);
+ Ver = (*Cache)[Pkg].CandidateVerIter(*Cache);
+ if (BADVER(Ver) == false)
+ verlist.insert(Ver);
}
- if (BADVER(Ver))
+ if (verlist.empty() == true)
{
pkgCache::PkgIterator HostPkg = Cache->FindPkg(D->Package, hostArch);
if (HostPkg.end() == false)
{
- Ver = (*Cache)[HostPkg].InstVerIter(*Cache);
- if (BADVER(Ver))
- Ver = (*Cache)[HostPkg].CandidateVerIter(*Cache);
+ pkgCache::VerIterator Ver = (*Cache)[HostPkg].InstVerIter(*Cache);
+ if (BADVER(Ver) == false)
+ verlist.insert(Ver);
+ Ver = (*Cache)[HostPkg].CandidateVerIter(*Cache);
+ if (BADVER(Ver) == false)
+ verlist.insert(Ver);
}
}
- if ((BADVER(Ver)) == false)
+ #undef BADVER
+
+ string forbidden;
+ // We need to decide if host or build arch, so find a version we can look at
+ APT::VersionList::const_iterator Ver = verlist.begin();
+ for (; Ver != verlist.end(); ++Ver)
{
- string forbidden;
+ forbidden.clear();
if (Ver->MultiArch == pkgCache::Version::None || Ver->MultiArch == pkgCache::Version::All)
{
if (colon == string::npos)
- {
Pkg = Ver.ParentPkg().Group().FindPkg(hostArch);
- }
+ else if (strcmp(D->Package.c_str() + colon, ":any") == 0)
+ forbidden = "Multi-Arch: none";
}
else if (Ver->MultiArch == pkgCache::Version::Same)
{
@@ -2937,21 +2974,32 @@ bool DoBuildDep(CommandLine &CmdL)
}
// native gets buildArch
}
+
if (forbidden.empty() == false)
{
if (_config->FindB("Debug::BuildDeps",false) == true)
- cout << " :any is not allowed from M-A: same package " << (*D).Package << endl;
+ cout << D->Package.substr(colon, string::npos) << " is not allowed from " << forbidden << " package " << (*D).Package << " (" << Ver.VerStr() << ")" << endl;
+ continue;
+ }
+
+ //we found a good version
+ break;
+ }
+ if (Ver == verlist.end())
+ {
+ if (_config->FindB("Debug::BuildDeps",false) == true)
+ cout << " No multiarch info as we have no satisfying installed nor candidate for " << D->Package << " on build or host arch" << endl;
+
+ if (forbidden.empty() == false)
+ {
if (hasAlternatives)
continue;
return _error->Error(_("%s dependency for %s can't be satisfied "
"because %s is not allowed on '%s' packages"),
Last->BuildDepType(D->Type), Src.c_str(),
- D->Package.c_str(), "Multi-Arch: same");
+ D->Package.c_str(), forbidden.c_str());
}
}
- else if (_config->FindB("Debug::BuildDeps",false) == true)
- cout << " No multiarch info as we have no satisfying installed nor candidate for " << D->Package << " on build or host arch" << endl;
- #undef BADVER
}
else
Pkg = Cache->FindPkg(D->Package);
@@ -3228,9 +3276,13 @@ bool DoChangelog(CommandLine &CmdL)
pkgAcquire Fetcher;
if (_config->FindB("APT::Get::Print-URIs", false) == true)
+ {
+ bool Success = true;
for (APT::VersionList::const_iterator Ver = verset.begin();
Ver != verset.end(); ++Ver)
- return DownloadChangelog(Cache, Fetcher, Ver, "");
+ Success &= DownloadChangelog(Cache, Fetcher, Ver, "");
+ return Success;
+ }
AcqTextStatus Stat(ScreenWidth, _config->FindI("quiet",0));
Fetcher.Setup(&Stat);
diff --git a/cmdline/apt-internal-solver.cc b/cmdline/apt-internal-solver.cc
index 25ecb7af1..aef7636e9 100644
--- a/cmdline/apt-internal-solver.cc
+++ b/cmdline/apt-internal-solver.cc
@@ -7,6 +7,8 @@
##################################################################### */
/*}}}*/
// Include Files /*{{{*/
+#include <config.h>
+
#include <apt-pkg/error.h>
#include <apt-pkg/cmndline.h>
#include <apt-pkg/init.h>
@@ -18,11 +20,10 @@
#include <apt-pkg/fileutl.h>
#include <apt-pkg/pkgsystem.h>
-#include <config.h>
-#include <apti18n.h>
-
#include <unistd.h>
#include <cstdio>
+
+#include <apti18n.h>
/*}}}*/
// ShowHelp - Show a help screen /*{{{*/
@@ -33,18 +34,16 @@ bool ShowHelp(CommandLine &CmdL) {
COMMON_ARCH,__DATE__,__TIME__);
std::cout <<
- _("Usage: apt-internal-resolver\n"
+ _("Usage: apt-internal-solver\n"
"\n"
- "apt-internal-resolver is an interface to use the current internal\n"
+ "apt-internal-solver is an interface to use the current internal\n"
"like an external resolver for the APT family for debugging or alike\n"
"\n"
"Options:\n"
" -h This help text.\n"
" -q Loggable output - no progress indicator\n"
" -c=? Read this configuration file\n"
- " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
- "apt.conf(5) manual pages for more information and options.\n"
- " This APT has Super Cow Powers.\n");
+ " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n");
return true;
}
/*}}}*/
diff --git a/cmdline/apt-key b/cmdline/apt-key
index 97d6e0323..c184e3e75 100755
--- a/cmdline/apt-key
+++ b/cmdline/apt-key
@@ -11,7 +11,8 @@ GPG_CMD="gpg --ignore-time-conflict --no-options --no-default-keyring --secret-k
if [ "$(id -u)" -eq 0 ]; then
# we could use a tmpfile here too, but creation of this tends to be time-consuming
- GPG_CMD="$GPG_CMD --trustdb-name /etc/apt/trustdb.gpg"
+ eval $(apt-config shell TRUSTDBDIR Dir::Etc/d)
+ GPG_CMD="$GPG_CMD --trustdb-name ${TRUSTDBDIR}/trustdb.gpg"
fi
GPG="$GPG_CMD"
diff --git a/cmdline/apt-mark.cc b/cmdline/apt-mark.cc
index 2d5eed29d..2a093c55a 100644
--- a/cmdline/apt-mark.cc
+++ b/cmdline/apt-mark.cc
@@ -367,7 +367,7 @@ bool ShowHelp(CommandLine &CmdL)
_("Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
"\n"
"apt-mark is a simple command line interface for marking packages\n"
- "as manual or automatical installed. It can also list marks.\n"
+ "as manually or automatically installed. It can also list marks.\n"
"\n"
"Commands:\n"
" auto - Mark the given packages as automatically installed\n"