summaryrefslogtreecommitdiff
path: root/cmdline
diff options
context:
space:
mode:
Diffstat (limited to 'cmdline')
-rw-r--r--cmdline/apt-cache.cc48
-rw-r--r--cmdline/apt-extracttemplates.cc2
-rw-r--r--cmdline/apt-extracttemplates.h1
-rw-r--r--cmdline/apt-get.cc8
-rw-r--r--cmdline/apt-helper.cc3
-rw-r--r--cmdline/apt-internal-solver.cc36
-rw-r--r--cmdline/apt.cc1
7 files changed, 76 insertions, 23 deletions
diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc
index 84b775390..2ed1bf5d4 100644
--- a/cmdline/apt-cache.cc
+++ b/cmdline/apt-cache.cc
@@ -264,6 +264,44 @@ static bool DumpPackage(CommandLine &CmdL)
return true;
}
/*}}}*/
+// ShowHashTableStats - Show stats about a hashtable /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+template<class T>
+static void ShowHashTableStats(std::string Type,
+ T *StartP,
+ map_ptrloc *Hashtable,
+ unsigned long Size)
+{
+ // hashtable stats for the HashTable
+ long NumBuckets = Size;
+ long UsedBuckets = 0;
+ long UnusedBuckets = 0;
+ long LongestBucket = 0;
+ long ShortestBucket = NumBuckets;
+ for (unsigned int i=0; i < NumBuckets; ++i)
+ {
+ T *P = StartP + Hashtable[i];
+ if(P == 0 || P == StartP)
+ {
+ UnusedBuckets++;
+ continue;
+ }
+ long ThisBucketSize = 0;
+ for (; P != StartP; P = StartP + P->Next)
+ ThisBucketSize++;
+ LongestBucket = std::max(ThisBucketSize, LongestBucket);
+ ShortestBucket = std::min(ThisBucketSize, ShortestBucket);
+ UsedBuckets += ThisBucketSize;
+ }
+ cout << "Total buckets " << Type << ": " << SizeToStr(NumBuckets) << std::endl;
+ cout << " Unused: " << SizeToStr(UnusedBuckets) << std::endl;
+ cout << " Used: " << UsedBuckets << std::endl;
+ cout << " Average entries: " << UsedBuckets/(double)NumBuckets << std::endl;
+ cout << " Longest: " << LongestBucket << std::endl;
+ cout << " Shortest: " << ShortestBucket << std::endl;
+}
+ /*}}}*/
// Stats - Dump some nice statistics /*{{{*/
// ---------------------------------------------------------------------
/* */
@@ -373,7 +411,13 @@ static bool Stats(CommandLine &)
Cache->Head().VerFileCount*Cache->Head().VerFileSz +
Cache->Head().ProvidesCount*Cache->Head().ProvidesSz;
cout << _("Total space accounted for: ") << SizeToStr(Total) << endl;
-
+
+ // hashtable stats
+ int HashTableSize = sizeof(Cache->HeaderP->PkgHashTable)/sizeof(map_ptrloc);
+ ShowHashTableStats<pkgCache::Package>("PkgHashTable", Cache->PkgP, Cache->HeaderP->PkgHashTable, HashTableSize);
+ HashTableSize = sizeof(Cache->HeaderP->GrpHashTable)/sizeof(map_ptrloc);
+ ShowHashTableStats<pkgCache::Group>("GrpHashTable", Cache->GrpP, Cache->HeaderP->GrpHashTable, HashTableSize);
+
return true;
}
/*}}}*/
@@ -507,7 +551,7 @@ static bool DumpAvail(CommandLine &)
break;
}
- FileFd PkgF(File.FileName(),FileFd::ReadOnly);
+ FileFd PkgF(File.FileName(),FileFd::ReadOnly, FileFd::Extension);
if (_error->PendingError() == true)
break;
diff --git a/cmdline/apt-extracttemplates.cc b/cmdline/apt-extracttemplates.cc
index 7be59b9f8..0d568106f 100644
--- a/cmdline/apt-extracttemplates.cc
+++ b/cmdline/apt-extracttemplates.cc
@@ -52,7 +52,7 @@ pkgCache *DebFile::Cache = 0;
// ---------------------------------------------------------------------
/* */
DebFile::DebFile(const char *debfile)
- : File(debfile, FileFd::ReadOnly), Size(0), Control(NULL), ControlLen(0),
+ : File(debfile, FileFd::ReadOnly), Control(NULL), ControlLen(0),
DepOp(0), PreDepOp(0), Config(0), Template(0), Which(None)
{
}
diff --git a/cmdline/apt-extracttemplates.h b/cmdline/apt-extracttemplates.h
index 9cc3f5f25..6d2870a02 100644
--- a/cmdline/apt-extracttemplates.h
+++ b/cmdline/apt-extracttemplates.h
@@ -20,7 +20,6 @@ class pkgCache;
class DebFile : public pkgDirStream
{
FileFd File;
- unsigned long Size;
char *Control;
unsigned long ControlLen;
diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc
index 3388351d9..bd866bc8c 100644
--- a/cmdline/apt-get.cc
+++ b/cmdline/apt-get.cc
@@ -756,6 +756,7 @@ static bool DoSource(CommandLine &CmdL)
// Load the requestd sources into the fetcher
unsigned J = 0;
+ std::string UntrustedList;
for (const char **I = CmdL.FileList + 1; *I != 0; I++, J++)
{
string Src;
@@ -764,6 +765,9 @@ static bool DoSource(CommandLine &CmdL)
if (Last == 0) {
return _error->Error(_("Unable to find a source package for %s"),Src.c_str());
}
+
+ if (Last->Index().IsTrusted() == false)
+ UntrustedList += Src + " ";
string srec = Last->AsStr();
string::size_type pos = srec.find("\nVcs-");
@@ -849,6 +853,10 @@ static bool DoSource(CommandLine &CmdL)
I->Hashes, I->Size, Last->Index().SourceInfo(*Last,*I), Src);
}
}
+
+ // check authentication status of the source as well
+ if (UntrustedList != "" && !AuthPrompt(UntrustedList, false))
+ return false;
// Display statistics
unsigned long long FetchBytes = Fetcher.FetchNeeded();
diff --git a/cmdline/apt-helper.cc b/cmdline/apt-helper.cc
index 2c1107d90..b0edafcbd 100644
--- a/cmdline/apt-helper.cc
+++ b/cmdline/apt-helper.cc
@@ -43,7 +43,8 @@ static bool DoDownloadFile(CommandLine &CmdL)
std::string hash;
if (CmdL.FileSize() > 3)
hash = CmdL.FileList[3];
- new pkgAcqFile(&Fetcher, download_uri, hash, 0, "desc", "short-desc",
+ // we use download_uri as descr and targetfile as short-descr
+ new pkgAcqFile(&Fetcher, download_uri, hash, 0, download_uri, targetfile,
"dest-dir-ignored", targetfile);
Fetcher.Run();
bool Failed = false;
diff --git a/cmdline/apt-internal-solver.cc b/cmdline/apt-internal-solver.cc
index b85c07c33..e4cdf6381 100644
--- a/cmdline/apt-internal-solver.cc
+++ b/cmdline/apt-internal-solver.cc
@@ -31,6 +31,7 @@
#include <string>
#include <unistd.h>
#include <cstdio>
+#include <stdlib.h>
#include <apti18n.h>
/*}}}*/
@@ -56,6 +57,12 @@ static bool ShowHelp(CommandLine &) {
return true;
}
/*}}}*/
+APT_NORETURN static void DIE(std::string const &message) { /*{{{*/
+ std::cerr << "ERROR: " << message << std::endl;
+ _error->DumpErrors(std::cerr);
+ exit(EXIT_FAILURE);
+}
+ /*}}}*/
int main(int argc,const char *argv[]) /*{{{*/
{
CommandLine::Args Args[] = {
@@ -115,34 +122,29 @@ int main(int argc,const char *argv[]) /*{{{*/
EDSP::WriteProgress(0, "Start up solver…", output);
- if (pkgInitSystem(*_config,_system) == false) {
- std::cerr << "System could not be initialized!" << std::endl;
- return 1;
- }
+ if (pkgInitSystem(*_config,_system) == false)
+ DIE("System could not be initialized!");
EDSP::WriteProgress(1, "Read request…", output);
if (WaitFd(input, false, 5) == false)
- std::cerr << "WAIT timed out in the resolver" << std::endl;
+ DIE("WAIT timed out in the resolver");
std::list<std::string> install, remove;
bool upgrade, distUpgrade, autoRemove;
- if (EDSP::ReadRequest(input, install, remove, upgrade, distUpgrade, autoRemove) == false) {
- std::cerr << "Parsing the request failed!" << std::endl;
- return 2;
- }
+ if (EDSP::ReadRequest(input, install, remove, upgrade, distUpgrade, autoRemove) == false)
+ DIE("Parsing the request failed!");
EDSP::WriteProgress(5, "Read scenario…", output);
pkgCacheFile CacheFile;
- CacheFile.Open(NULL, false);
+ if (CacheFile.Open(NULL, false) == false)
+ DIE("Failed to open CacheFile!");
EDSP::WriteProgress(50, "Apply request on scenario…", output);
- if (EDSP::ApplyRequest(install, remove, CacheFile) == false) {
- std::cerr << "Failed to apply request to depcache!" << std::endl;
- return 3;
- }
+ if (EDSP::ApplyRequest(install, remove, CacheFile) == false)
+ DIE("Failed to apply request to depcache!");
pkgProblemResolver Fix(CacheFile);
for (std::list<std::string>::const_iterator i = remove.begin();
@@ -183,10 +185,8 @@ int main(int argc,const char *argv[]) /*{{{*/
EDSP::WriteProgress(95, "Write solution…", output);
- if (EDSP::WriteSolution(CacheFile, output) == false) {
- std::cerr << "Failed to output the solution!" << std::endl;
- return 4;
- }
+ if (EDSP::WriteSolution(CacheFile, output) == false)
+ DIE("Failed to output the solution!");
EDSP::WriteProgress(100, "Done", output);
diff --git a/cmdline/apt.cc b/cmdline/apt.cc
index 72086af14..2cfdf8e8e 100644
--- a/cmdline/apt.cc
+++ b/cmdline/apt.cc
@@ -116,6 +116,7 @@ int main(int argc, const char *argv[]) /*{{{*/
_config->CndSet("DPkg::Progress-Fancy", "1");
_config->CndSet("Apt::Color", "1");
_config->CndSet("APT::Get::Upgrade-Allow-New", true);
+ _config->CndSet("APT::Cmd::Show-Update-Stats", true);
// Parse the command line and initialize the package library
CommandLine CmdL(Args.data(), _config);