// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: acquire-item.cc,v 1.25 1999/02/27 22:29:11 jgg Exp $
+// $Id: acquire-item.cc,v 1.26 1999/03/27 03:02:38 jgg Exp $
/* ######################################################################
Acquire Item - Item to acquire
// ---------------------------------------------------------------------
/* */
pkgAcquire::Item::Item(pkgAcquire *Owner) : Owner(Owner), FileSize(0),
- Mode(0), ID(0), Complete(false), Local(false),
- QueueCounter(0)
+ PartialSize(0), Mode(0), ID(0), Complete(false),
+ Local(false), QueueCounter(0)
{
Owner->Add(this);
Status = StatIdle;
return true;
}
- /* Hmm, we have a file and its size does not match, this shouldnt
- happen.. */
+ /* Hmm, we have a file and its size does not match, this means it is
+ an old style mismatched arch */
unlink(FinalFile.c_str());
}
}
DestFile = _config->FindDir("Dir::Cache::Archives") + "partial/" + flNotDir(StoreFilename);
-
+
+ // Check the destination file
+ if (stat(DestFile.c_str(),&Buf) == 0)
+ {
+ // Hmm, the partial file is too big, erase it
+ if ((unsigned)Buf.st_size > Version->Size)
+ unlink(DestFile.c_str());
+ else
+ PartialSize = Buf.st_size;
+ }
+
// Create the item
Desc.URI = Location->ArchiveURI(PkgFile);
Desc.Description = Location->ArchiveInfo(Version);
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: acquire-item.h,v 1.16 1999/02/01 02:22:11 jgg Exp $
+// $Id: acquire-item.h,v 1.17 1999/03/27 03:02:38 jgg Exp $
/* ######################################################################
Acquire Item - Item to acquire
enum {StatIdle, StatFetching, StatDone, StatError} Status;
string ErrorText;
unsigned long FileSize;
+ unsigned long PartialSize;
char *Mode;
unsigned long ID;
bool Complete;
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: acquire.cc,v 1.30 1999/03/16 07:28:45 jgg Exp $
+// $Id: acquire.cc,v 1.31 1999/03/27 03:02:38 jgg Exp $
/* ######################################################################
Acquire - File Acquiration
return Total;
}
/*}}}*/
+// Acquire::PartialPresent - Number of partial bytes we already have /*{{{*/
+// ---------------------------------------------------------------------
+/* This is the number of bytes that is not local */
+unsigned long pkgAcquire::PartialPresent()
+{
+ unsigned long Total = 0;
+ for (pkgAcquire::Item **I = ItemsBegin(); I != ItemsEnd(); I++)
+ if ((*I)->Local == false)
+ Total += (*I)->PartialSize;
+ return Total;
+}
+ /*}}}*/
// pkgAcquire::UriBegin - Start iterator for the uri list /*{{{*/
// ---------------------------------------------------------------------
/* */
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: acquire.h,v 1.19 1999/01/30 06:07:24 jgg Exp $
+// $Id: acquire.h,v 1.20 1999/03/27 03:02:39 jgg Exp $
/* ######################################################################
Acquire - File Acquiration
// Returns the size of the total download set
unsigned long TotalNeeded();
unsigned long FetchNeeded();
+ unsigned long PartialPresent();
pkgAcquire(pkgAcquireStatus *Log = 0);
~pkgAcquire();
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: apt-get.cc,v 1.46 1999/03/27 01:30:38 jgg Exp $
+// $Id: apt-get.cc,v 1.47 1999/03/27 03:02:39 jgg Exp $
/* ######################################################################
apt-get - Cover for dpkg
// Display statistics
unsigned long FetchBytes = Fetcher.FetchNeeded();
+ unsigned long FetchPBytes = Fetcher.PartialPresent();
unsigned long DebBytes = Fetcher.TotalNeeded();
if (DebBytes != Cache->DebSize())
{
if (statfs(OutputDir.c_str(),&Buf) != 0)
return _error->Errno("statfs","Couldn't determine free space in %s",
OutputDir.c_str());
- if (unsigned(Buf.f_bfree) < FetchBytes/Buf.f_bsize)
+ if (unsigned(Buf.f_bfree) < (FetchBytes - FetchPBytes)/Buf.f_bsize)
return _error->Error("Sorry, you don't have enough free space in %s",
OutputDir.c_str());