From d38b7b3d803a719b189df80820aeda6a818f4909 Mon Sep 17 00:00:00 2001 From: Arch Librarian Date: Mon, 20 Sep 2004 16:51:37 +0000 Subject: Needs Unpack fixes Author: jgg Date: 1998-11-23 07:02:58 GMT Needs Unpack fixes --- cmdline/apt-get.cc | 49 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 12 deletions(-) (limited to 'cmdline/apt-get.cc') diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 24a3f8e7f..c90c0ed54 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: apt-get.cc,v 1.17 1998/11/23 01:45:59 jgg Exp $ +// $Id: apt-get.cc,v 1.18 1998/11/23 07:03:13 jgg Exp $ /* ###################################################################### apt-get - Cover for dpkg @@ -34,6 +34,7 @@ #include #include #include +#include #include #include @@ -359,6 +360,7 @@ class CacheFile FileFd *File; MMap *Map; pkgDepCache *Cache; + pkgDpkgLock Lock; inline operator pkgDepCache &() {return *Cache;}; inline pkgDepCache *operator ->() {return Cache;}; @@ -380,6 +382,9 @@ class CacheFile and verifies that the system is OK. */ bool CacheFile::Open() { + if (_error->PendingError() == true) + return false; + // Create a progress class OpTextProgress Progress(*_config); @@ -454,7 +459,7 @@ bool CacheFile::Open() // --------------------------------------------------------------------- /* This displays the informative messages describing what is going to happen and then calls the download routines */ -bool InstallPackages(pkgDepCache &Cache,bool ShwKept,bool Ask = true) +bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask = true) { // Show all the various warning indicators ShowDel(c1out,Cache); @@ -468,14 +473,14 @@ bool InstallPackages(pkgDepCache &Cache,bool ShwKept,bool Ask = true) Stats(c1out,Cache); // Sanity check - if (Cache.BrokenCount() != 0) + if (Cache->BrokenCount() != 0) { ShowBroken(c1out,Cache); return _error->Error("Internal Error, InstallPackages was called with broken packages!"); } - if (Cache.DelCount() == 0 && Cache.InstCount() == 0 && - Cache.BadCount() == 0) + if (Cache->DelCount() == 0 && Cache->InstCount() == 0 && + Cache->BadCount() == 0) return true; // Run the simulator .. @@ -487,6 +492,14 @@ bool InstallPackages(pkgDepCache &Cache,bool ShwKept,bool Ask = true) // Create the text record parser pkgRecords Recs(Cache); + + // Lock the archive directory + if (_config->FindB("Debug::NoLocking",false) == false) + { + FileFd Lock(GetLock(_config->FindDir("Dir::Cache::Archives") + "lock")); + if (_error->PendingError() == true) + return _error->Error("Unable to lock the download directory"); + } // Create the download object AcqTextStatus Stat(ScreenWidth,_config->FindI("quiet",0)); @@ -505,9 +518,12 @@ bool InstallPackages(pkgDepCache &Cache,bool ShwKept,bool Ask = true) // Display statistics unsigned long FetchBytes = Fetcher.FetchNeeded(); unsigned long DebBytes = Fetcher.TotalNeeded(); - if (DebBytes != Cache.DebSize()) + if (DebBytes != Cache->DebSize()) + { + c0out << DebBytes << ',' << Cache->DebSize() << endl; c0out << "How odd.. The sizes didn't match, email apt@packages.debian.org" << endl; - + } + // Number of bytes c1out << "Need to get "; if (DebBytes != FetchBytes) @@ -518,10 +534,10 @@ bool InstallPackages(pkgDepCache &Cache,bool ShwKept,bool Ask = true) c1out << " of archives. After unpacking "; // Size delta - if (Cache.UsrSize() >= 0) - c1out << SizeToStr(Cache.UsrSize()) << " will be used." << endl; + if (Cache->UsrSize() >= 0) + c1out << SizeToStr(Cache->UsrSize()) << " will be used." << endl; else - c1out << SizeToStr(-1*Cache.UsrSize()) << " will be freed." << endl; + c1out << SizeToStr(-1*Cache->UsrSize()) << " will be freed." << endl; if (_error->PendingError() == true) return false; @@ -557,12 +573,13 @@ bool InstallPackages(pkgDepCache &Cache,bool ShwKept,bool Ask = true) return _error->Error("Unable to fetch some archives, maybe try with --fix-missing?"); // Try to deal with missing package files -/* if (PM.FixMissing() == false) + if (PM.FixMissing() == false) { cerr << "Unable to correct missing packages." << endl; return _error->Error("Aborting Install."); - }*/ + } + Cache.Lock.Close(); return PM.DoInstall(); } /*}}}*/ @@ -577,6 +594,14 @@ bool DoUpdate(CommandLine &) if (List.ReadMainList() == false) return false; + // Lock the list directory + if (_config->FindB("Debug::NoLocking",false) == false) + { + FileFd Lock(GetLock(_config->FindDir("Dir::State::Lists") + "lock")); + if (_error->PendingError() == true) + return _error->Error("Unable to lock the list directory"); + } + // Create the download object AcqTextStatus Stat(ScreenWidth,_config->FindI("quiet",0)); pkgAcquire Fetcher(&Stat); -- cgit v1.2.3