summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
Diffstat (limited to 'apt-pkg')
-rw-r--r--apt-pkg/acquire-item.cc12
-rw-r--r--apt-pkg/acquire.cc6
-rw-r--r--apt-pkg/acquire.h3
-rw-r--r--apt-pkg/cdrom.cc17
4 files changed, 23 insertions, 15 deletions
diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc
index de8cfe8f2..714edd8d8 100644
--- a/apt-pkg/acquire-item.cc
+++ b/apt-pkg/acquire-item.cc
@@ -350,18 +350,8 @@ pkgAcqMetaSig::pkgAcqMetaSig(pkgAcquire *Owner,
/* The only header we use is the last-modified header. */
string pkgAcqMetaSig::Custom600Headers()
{
- // mvo: we don't really need the last-modified header here
- // 1) it points to "Final" and that was renamed to "DestFile"
- // so it's never send anyway
- // 2) because DestFIle is in partial/ we will send a partial request
- // with if-range in the http method (or the equivalent for ftp).
- // that should give the same result
-
- string Final = _config->FindDir("Dir::State::lists");
- Final += URItoFileName(RealURI);
-
struct stat Buf;
- if (stat(Final.c_str(),&Buf) != 0)
+ if (stat(DestFile.c_str(),&Buf) != 0)
return "\nIndex-File: true";
return "\nIndex-File: true\nLast-Modified: " + TimeRFC1123(Buf.st_mtime);
diff --git a/apt-pkg/acquire.cc b/apt-pkg/acquire.cc
index 3c207fd27..70dce4f54 100644
--- a/apt-pkg/acquire.cc
+++ b/apt-pkg/acquire.cc
@@ -312,7 +312,7 @@ void pkgAcquire::RunFds(fd_set *RSet,fd_set *WSet)
/* This runs the queues. It manages a select loop for all of the
Worker tasks. The workers interact with the queues and items to
manage the actual fetch. */
-pkgAcquire::RunResult pkgAcquire::Run()
+pkgAcquire::RunResult pkgAcquire::Run(int PulseIntervall)
{
Running = true;
@@ -327,7 +327,7 @@ pkgAcquire::RunResult pkgAcquire::Run()
// Run till all things have been acquired
struct timeval tv;
tv.tv_sec = 0;
- tv.tv_usec = 500000;
+ tv.tv_usec = PulseIntervall;
while (ToFetch > 0)
{
fd_set RFds;
@@ -357,7 +357,7 @@ pkgAcquire::RunResult pkgAcquire::Run()
// Timeout, notify the log class
if (Res == 0 || (Log != 0 && Log->Update == true))
{
- tv.tv_usec = 500000;
+ tv.tv_usec = PulseIntervall;
for (Worker *I = Workers; I != 0; I = I->NextAcquire)
I->Pulse();
if (Log != 0 && Log->Pulse(this) == false)
diff --git a/apt-pkg/acquire.h b/apt-pkg/acquire.h
index 65c53a953..3e338b220 100644
--- a/apt-pkg/acquire.h
+++ b/apt-pkg/acquire.h
@@ -100,7 +100,8 @@ class pkgAcquire
enum RunResult {Continue,Failed,Cancelled};
- RunResult Run();
+ RunResult Run() { return Run(500000); }; // Binary compatibility
+ RunResult Run(int PulseIntervall);
void Shutdown();
// Simple iteration mechanism
diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc
index a91fc7181..1b9e98519 100644
--- a/apt-pkg/cdrom.cc
+++ b/apt-pkg/cdrom.cc
@@ -169,6 +169,23 @@ int pkgCdrom::Score(string Path)
Res += 10;
if (Path.find("/debian/") != string::npos)
Res -= 10;
+
+ // check for symlinks in the patch leading to the actual file
+ // a symlink gets a big penalty
+ struct stat Buf;
+ string statPath = flNotFile(Path);
+ string cdromPath = _config->FindDir("Acquire::cdrom::mount","/cdrom/");
+ while(statPath != cdromPath && statPath != "./") {
+ statPath.resize(statPath.size()-1); // remove the trailing '/'
+ if (lstat(statPath.c_str(),&Buf) == 0) {
+ if(S_ISLNK(Buf.st_mode)) {
+ Res -= 60;
+ break;
+ }
+ }
+ statPath = flNotFile(statPath); // descent
+ }
+
return Res;
}