Browse Source

Sync

Author: jgg
Date: 1998-10-24 04:57:55 GMT
Sync
debian/1.8.y
Arch Librarian 19 years ago
parent
commit
c88edf1d27
  1. 64
      apt-pkg/acquire-item.cc
  2. 12
      apt-pkg/acquire-item.h
  3. 45
      apt-pkg/acquire-worker.cc
  4. 8
      apt-pkg/acquire-worker.h
  5. 32
      apt-pkg/acquire.cc
  6. 7
      apt-pkg/acquire.h
  7. 20
      apt-pkg/algorithms.cc
  8. 4
      apt-pkg/contrib/strutl.cc
  9. 199
      apt-pkg/depcache.cc
  10. 11
      apt-pkg/tagfile.cc
  11. 3
      cmdline/apt-get.cc
  12. 4
      cmdline/makefile
  13. 4
      configure.in
  14. 6
      doc/examples/apt.conf

64
apt-pkg/acquire-item.cc

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: acquire-item.cc,v 1.3 1998/10/22 04:56:38 jgg Exp $
// $Id: acquire-item.cc,v 1.4 1998/10/24 04:57:56 jgg Exp $
/* ######################################################################
Acquire Item - Item to acquire
@ -22,6 +22,9 @@
#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>
/*}}}*/
// Acquire::Item::Item - Constructor /*{{{*/
@ -30,6 +33,7 @@
pkgAcquire::Item::Item(pkgAcquire *Owner) : Owner(Owner), QueueCounter(0)
{
Owner->Add(this);
Status = StatIdle;
}
/*}}}*/
// Acquire::Item::~Item - Destructor /*{{{*/
@ -40,6 +44,27 @@ pkgAcquire::Item::~Item()
Owner->Remove(this);
}
/*}}}*/
// Acquire::Item::Failed - Item failed to download /*{{{*/
// ---------------------------------------------------------------------
/* */
void pkgAcquire::Item::Failed(string Message)
{
Status = StatError;
ErrorText = LookupTag(Message,"Message");
if (QueueCounter <= 1)
Owner->Dequeue(this);
}
/*}}}*/
// Acquire::Item::Done - Item downloaded OK /*{{{*/
// ---------------------------------------------------------------------
/* */
void pkgAcquire::Item::Done(string,unsigned long,string)
{
Status = StatDone;
ErrorText = string();
Owner->Dequeue(this);
}
/*}}}*/
// AcqIndex::AcqIndex - Constructor /*{{{*/
// ---------------------------------------------------------------------
@ -100,3 +125,40 @@ string pkgAcqIndexRel::Custom600Headers()
return "\nLast-Modified: " + TimeRFC1123(Buf.st_mtime);
}
/*}}}*/
// AcqIndexRel::Done - Item downloaded OK /*{{{*/
// ---------------------------------------------------------------------
/* The release file was not placed into the download directory then
a copy URI is generated and it is copied there otherwise the file
in the partial directory is moved into .. and the URI is finished. */
void pkgAcqIndexRel::Done(string Message,unsigned long Size,string MD5)
{
Item::Done(Message,Size,MD5);
string FileName = LookupTag(Message,"Filename");
if (FileName.empty() == true)
{
Status = StatError;
ErrorText = "Method gave a blank filename";
}
// We have to copy it into place
if (FileName != DestFile)
{
QueueURI("copy:" + FileName,string());
return;
}
// Done, move it into position
string FinalFile = _config->FindDir("Dir::State::lists");
FinalFile += URItoFileName(Location->ReleaseURI());
if (rename(DestFile.c_str(),FinalFile.c_str()) != 0)
{
char S[300];
sprintf(S,"rename failed, %s (%s -> %s).",strerror(errno),
DestFile.c_str(),FinalFile.c_str());
Status = StatError;
ErrorText = S;
}
}
/*}}}*/

12
apt-pkg/acquire-item.h

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: acquire-item.h,v 1.2 1998/10/22 04:56:39 jgg Exp $
// $Id: acquire-item.h,v 1.3 1998/10/24 04:57:57 jgg Exp $
/* ######################################################################
Acquire Item - Item to acquire
@ -35,13 +35,19 @@ class pkgAcquire::Item
public:
// State of the item
enum {StatIdle, StatFetching, StatDone, StatError} Status;
string ErrorText;
// Number of queues we are inserted into
unsigned int QueueCounter;
// File to write the fetch into
string DestFile;
virtual void Failed() {};
virtual void Failed(string Message);
virtual void Done(string Message,unsigned long Size,string Md5Hash);
virtual string Custom600Headers() {return string();};
Item(pkgAcquire *Owner);
@ -71,6 +77,8 @@ class pkgAcqIndexRel : public pkgAcquire::Item
public:
virtual void Done(string Message,unsigned long Size,string Md5Hash);
virtual string Custom600Headers();
pkgAcqIndexRel(pkgAcquire *Owner,const pkgSourceList::Item *Location);

45
apt-pkg/acquire-worker.cc

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: acquire-worker.cc,v 1.5 1998/10/23 00:49:58 jgg Exp $
// $Id: acquire-worker.cc,v 1.6 1998/10/24 04:57:58 jgg Exp $
/* ######################################################################
Acquire Worker
@ -187,6 +187,11 @@ bool pkgAcquire::Worker::RunMessages()
if (End == Message.c_str())
return _error->Error("Invalid message from method %s: %s",Access.c_str(),Message.c_str());
string URI = LookupTag(Message,"URI");
pkgAcquire::Queue::QItem *Itm = 0;
if (URI.empty() == false)
Itm = OwnerQ->FindItem(URI,this);
// Determine the message number and dispatch
switch (Number)
{
@ -209,15 +214,47 @@ bool pkgAcquire::Worker::RunMessages()
// 200 URI Start
case 200:
break;
{
if (Itm == 0)
{
_error->Warning("Method gave invalid 200 URI Start message");
break;
}
CurrentItem = Itm;
CurrentSize = 0;
TotalSize = atoi(LookupTag(Message,"Size","0").c_str());
break;
}
// 201 URI Done
case 201:
break;
{
if (Itm == 0)
{
_error->Warning("Method gave invalid 400 URI Failure message");
break;
}
Itm->Owner->Done(Message,atoi(LookupTag(Message,"Size","0").c_str()),
LookupTag(Message,"MD5-Hash"));
OwnerQ->ItemDone(Itm);
break;
}
// 400 URI Failure
case 400:
break;
{
if (Itm == 0)
{
_error->Warning("Method gave invalid 400 URI Failure message");
break;
}
Itm->Owner->Failed(Message);
OwnerQ->ItemDone(Itm);
break;
}
// 401 General Failure
case 401:

8
apt-pkg/acquire-worker.h

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: acquire-worker.h,v 1.3 1998/10/22 04:56:42 jgg Exp $
// $Id: acquire-worker.h,v 1.4 1998/10/24 04:57:59 jgg Exp $
/* ######################################################################
Acquire Worker - Worker process manager
@ -65,10 +65,12 @@ class pkgAcquire::Worker
public:
// The curent method state
pkgAcquire::Queue::QItem *CurrentItem;
string Status;
unsigned long CurrentSize;
unsigned long TotalSize;
// Load the method and do the startup
bool QueueItem(pkgAcquire::Queue::QItem *Item);
bool Start();

32
apt-pkg/acquire.cc

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: acquire.cc,v 1.3 1998/10/22 04:56:43 jgg Exp $
// $Id: acquire.cc,v 1.4 1998/10/24 04:58:01 jgg Exp $
/* ######################################################################
Acquire - File Acquiration
@ -331,7 +331,7 @@ void pkgAcquire::Queue::Enqueue(Item *Owner,string URI,string Description)
Owner->QueueCounter++;
}
/*}}}*/
// Queue::Dequeue - Remove and item from the queue /*{{{*/
// Queue::Dequeue - Remove an item from the queue /*{{{*/
// ---------------------------------------------------------------------
/* */
void pkgAcquire::Queue::Dequeue(Item *Owner)
@ -367,6 +367,7 @@ bool pkgAcquire::Queue::Startup()
if (Workers->Start() == false)
return false;
Items->Worker = Workers;
Workers->QueueItem(Items);
return true;
@ -389,3 +390,30 @@ bool pkgAcquire::Queue::Shutdown()
return true;
}
/*}}}*/
// Queue::Finditem - Find a URI in the item list /*{{{*/
// ---------------------------------------------------------------------
/* */
pkgAcquire::Queue::QItem *pkgAcquire::Queue::FindItem(string URI,pkgAcquire::Worker *Owner)
{
for (QItem *I = Items; I != 0; I = I->Next)
if (I->URI == URI && I->Worker == Owner)
return I;
return 0;
}
/*}}}*/
// Queue::ItemDone - Item has been completed /*{{{*/
// ---------------------------------------------------------------------
/* The worker signals this which causes the item to be removed from the
queue. */
bool pkgAcquire::Queue::ItemDone(QItem *Itm)
{
Dequeue(Itm->Owner);
if (Items == 0)
return true;
Items->Worker = Workers;
Items->Owner->Status = pkgAcquire::Item::StatFetching;
return Workers->QueueItem(Items);
}
/*}}}*/

7
apt-pkg/acquire.h

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: acquire.h,v 1.3 1998/10/22 04:56:44 jgg Exp $
// $Id: acquire.h,v 1.4 1998/10/24 04:58:02 jgg Exp $
/* ######################################################################
Acquire - File Acquiration
@ -105,6 +105,7 @@ class pkgAcquire::Queue
string URI;
string Description;
Item *Owner;
pkgAcquire::Worker *Worker;
};
// Name of the queue
@ -121,6 +122,10 @@ class pkgAcquire::Queue
void Enqueue(Item *Owner,string URI,string Description);
void Dequeue(Item *Owner);
// Find a Queued item
QItem *FindItem(string URI,pkgAcquire::Worker *Owner);
bool ItemDone(QItem *Itm);
bool Startup();
bool Shutdown();

20
apt-pkg/algorithms.cc

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: algorithms.cc,v 1.7 1998/10/20 04:33:13 jgg Exp $
// $Id: algorithms.cc,v 1.8 1998/10/24 04:58:04 jgg Exp $
/* ######################################################################
Algorithms - A set of misc algorithms
@ -245,14 +245,17 @@ bool pkgDistUpgrade(pkgDepCache &Cache)
Cache.MarkInstall(I,false);
pkgProblemResolver Fix(Cache);
// Hold back held packages.
for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++)
if (_config->FindB("APT::Ingore-Hold",false) == false)
{
if (I->SelectedState == pkgCache::State::Hold)
for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++)
{
Fix.Protect(I);
Cache.MarkKeep(I);
if (I->SelectedState == pkgCache::State::Hold)
{
Fix.Protect(I);
Cache.MarkKeep(I);
}
}
}
@ -277,8 +280,9 @@ bool pkgAllUpgrade(pkgDepCache &Cache)
if (Cache[I].Install() == true)
Fix.Protect(I);
if (I->SelectedState == pkgCache::State::Hold)
continue;
if (_config->FindB("APT::Ingore-Hold",false) == false)
if (I->SelectedState == pkgCache::State::Hold)
continue;
if (I->CurrentVer != 0 && Cache[I].InstallVer != 0)
Cache.MarkInstall(I,false);

4
apt-pkg/contrib/strutl.cc

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: strutl.cc,v 1.7 1998/10/23 00:49:59 jgg Exp $
// $Id: strutl.cc,v 1.8 1998/10/24 04:58:07 jgg Exp $
/* ######################################################################
String Util - Some usefull string functions.
@ -521,7 +521,7 @@ bool ReadMessages(int Fd, vector<string> &List)
End += Res;
// Look for the end of the message
for (char *I = Buffer; I < End; I++)
for (char *I = Buffer; I + 1 < End; I++)
{
if (I[0] != '\n' || I[1] != '\n')
continue;

199
apt-pkg/depcache.cc

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: depcache.cc,v 1.3 1998/09/07 05:28:32 jgg Exp $
// $Id: depcache.cc,v 1.4 1998/10/24 04:58:05 jgg Exp $
/* ######################################################################
Dependency Cache - Caches Dependency information.
@ -673,203 +673,6 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst)
}
/*}}}*/
#if 0
// DepCache::ResolveConflicts - Figure the auto upgrades /*{{{*/
// ---------------------------------------------------------------------
/* This routine attempts to resolve conflicts generated by automatic
upgrading. It is known as 'Stage 1' but that name isn't as proper anymore.
It's most important function is during the initial load of APT. The
loading code will mark every package for upgrade to it's candidate version
and then call this routine. This routine will then 'soft keep' every
package that causes conflict, is conflicted, or so on. It is a bit
agressive in that it may unselect more packages in some odd cases
than are strictly necessary but in the case where no packages were
conflicting before it will always produce a system with no packages
conflicting after.
This routine is also used during state changes that require autoupgrade
scanning. That is, if a new package is marked for install then all packages
that have been soft kept are reconsidered for upgrade.
It is called with state information about what can be un-upgraded and
what the pre-upgrade install state was. It is expected that the caller
has already marked the desired packages to the install state. Bit 0 is
the original install state and Bit 1 is controls whether the package
should be touched.
*/
void pkgDepCache::ResolveConflicts(unsigned char *Touched)
{
bool Again = false;
do
{
Again = false;
for (PkgIterator I = PkgBegin(); I.end() != true; I++)
{
// The package will install OK
if ((PkgState[I->ID].DepState & DepInstMin) == DepInstMin)
continue;
/* The package was broken before and this upgrade will not
make things better. We simply mark the package for keep
and assume an upgrade attempt will be hopeless. This might
not be ideal. */
if ((Touched[I->ID] & (1 << 0)) != (1 << 0))
{
// The package isnt to be touched
if ((Touched[I->ID] & (1 << 1)) == (1 << 1))
MarkKeep(I,true);
continue;
}
// Check to see if not upgrading it will solve the problem
if (I->CurrentVer != 0)
{
// The package isnt to be touched
if ((Touched[I->ID] & (1 << 1)) == (1 << 1))
{
if (PkgState[I->ID].Mode != ModeKeep)
Again = true;
MarkKeep(I,true);
}
/* Check if the package is sill broken. If so then we cant leave
it as is and get a working system. Lets try marking some
depends for 'keep'. This is brutal, it keeps everything in
sight to fix the problem. */
DepIterator D = I.CurrentVer().DependsList();
for (;(PkgState[I->ID].DepState & DepInstMin) != DepInstMin &&
D.end() != true; D++)
{
// We only worry about critical deps.
if (D.IsCritical() != true)
continue;
unsigned char State = DepState[D->ID];
// This dep never was set before so we dont need to set it now
if ((State & DepNow) != DepNow)
continue;
// The dep is okay now no worries.
if ((State & DepInstall) == DepInstall)
continue;
// Locate a target to keep
PkgIterator P(*this);
if (CheckDep(D,NowVersion,P) == true)
{
// We cant touch this package
if ((Touched[P->ID] & (1 << 1)) == (1 << 1))
MarkKeep(P,true);
}
}
}
}
}
while (Again == true);
}
/*}}}*/
// DepCache::PromoteAutoKeep - Gentler version of the above /*{{{*/
// ---------------------------------------------------------------------
/* This is used when installing packages, all it does is attempt to promote
everything that has been auto-kept. It simply promotes everything
irregardless of it having a chance to work and then runs ResolveConflicts
on the result. This allows circular depends loops to work but isn't
terribly fast. */
void pkgDepCache::PromoteAutoKeep()
{
/* Initialize the touchd array. Bit 0 is the old install state bit 1
is the touch value */
unsigned char *Touch = new unsigned char[Head().PackageCount];
for (unsigned int I = 0; I != Head().PackageCount; I++)
{
if ((PkgState[I].DepState & DepInstMin) == DepInstMin)
Touch[I] = 1 << 0;
else
Touch[I] = 0;
}
// This allows circular depends to work
for (PkgIterator I = PkgBegin(); I.end() != true; I++)
{
/* It wasnt installed before or it is not autokept or it is not
upgradeable */
StateCache &P = PkgState[I->ID];
if (I->CurrentVer == 0 || P.Mode != ModeKeep || I->VersionList == 0 ||
P.CandidateVer == (Version *)I.CurrentVer() ||
(P.iFlags & AutoKept) != AutoKept)
continue;
P.Mode = ModeInstall;
P.InstallVer = P.CandidateVer;
if (P.CandidateVer == (Version *)I.CurrentVer())
P.Mode = ModeKeep;
// Okay autoupgrade it.
Touch[I->ID] |= 1 << 1;
}
Update();
ResolveConflicts(Touch);
delete [] Touch;
}
/*}}}*/
// DepCache::AllUpgrade - Try to upgrade everything /*{{{*/
// ---------------------------------------------------------------------
/* */
void pkgDepCache::AllUpgrade()
{
// Set everything to an upgrade mode
for (PkgIterator I = PkgBegin(); I.end() != true; I++)
{
StateCache &State = PkgState[I->ID];
/* We dont upgrade packages marked for deletion or that are
not installed or that don't have an upgrade */
if (State.Mode == ModeDelete || I->CurrentVer == 0 ||
(Version *)I.CurrentVer() == State.CandidateVer)
continue;
// Set the state to upgrade
State.iFlags = 0;
State.Mode = ModeInstall;
State.InstallVer = State.CandidateVer;
if (State.CandidateVer == (Version *)I.CurrentVer())
State.Mode = ModeKeep;
// Do not upgrade things that have the hold flag set.
if (I->SelectedState == State::Hold)
{
State.InstallVer = I.CurrentVer();
State.Mode = ModeKeep;
}
State.Update(I,*this);
}
Update();
/* Initialize the touchd array. Bit 0 is the old install state bit 1
is the touch value */
unsigned char *Touch = new unsigned char[Head().PackageCount];
for (unsigned int I = 0; I != Head().PackageCount; I++)
{
if ((PkgState[I].DepState & DepNowMin) == DepNowMin)
Touch[I] = (1 << 0) | (1 << 1);
else
Touch[I] = 1 << 1;
}
// Now downgrade everything that is broken
ResolveConflicts(Touch);
delete [] Touch;
}
/*}}}*/
#endif
// StateCache::Update - Compute the various static display things /*{{{*/
// ---------------------------------------------------------------------
/* This is called whenever the Candidate version changes. */

11
apt-pkg/tagfile.cc

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: tagfile.cc,v 1.11 1998/10/02 04:39:48 jgg Exp $
// $Id: tagfile.cc,v 1.12 1998/10/24 04:58:06 jgg Exp $
/* ######################################################################
Fast scanner for RFC-822 type header information
@ -75,18 +75,23 @@ bool pkgTagFile::Fill()
Start = Buffer;
End = Buffer + EndSize;
// See if only a bit of the file is left
if (Left < Size)
// See if only a bit of the file is left
if (Left < Size - (End - Buffer))
{
if (Fd.Read(End,Left) == false)
return false;
End += Left;
Left = 0;
}
else
{
if (Fd.Read(End,Size - (End - Buffer)) == false)
{
cout << "boink" << endl;
return false;
}
Left -= Size - (End - Buffer);
End = Buffer + Size;
}

3
cmdline/apt-get.cc

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: apt-get.cc,v 1.4 1998/10/20 04:33:18 jgg Exp $
// $Id: apt-get.cc,v 1.5 1998/10/24 04:58:08 jgg Exp $
/* ######################################################################
apt-get - Cover for dpkg
@ -782,6 +782,7 @@ int main(int argc,const char *argv[])
{'f',"fix-broken","APT::Get::Fix-Broken",0},
{'u',"show-upgraded","APT::Get::Show-Upgraded",0},
{'m',"ignore-missing","APT::Get::Fix-Broken",0},
{0,"ignore-hold","APT::Ingore-Hold",0},
{'c',"config-file",0,CommandLine::ConfigFile},
{'o',"option",0,CommandLine::ArbItem},
{0,0,0,0}};

4
cmdline/makefile

@ -7,12 +7,12 @@ include ../buildlib/defaults.mak
# The apt-cache program
PROGRAM=apt-cache
SLIBS = -lapt-pkg
SLIBS = -lapt-pkg
SOURCE = apt-cache.cc
include $(PROGRAM_H)
# The apt-config program
PROGRAM=apt-get
SLIBS = -lapt-pkg
SLIBS = -lapt-pkg
SOURCE = apt-get.cc
include $(PROGRAM_H)

4
configure.in

@ -39,7 +39,7 @@ X11LIB=
if test "$no_x" != "yes"; then
X11LIB="-lX11"
AC_DEFINE(HAVE_X11)
dnl Checks for Slang
dnl Checks for ZPM
AC_CHECK_LIB(Xpm, XpmLibraryVersion,[AC_DEFINE(HAVE_LIBXPM) XPMLIB="-lXpm"],,$X_LIBS $X_PRE_LIBS $X11LIB $X_EXTRA_LIBS)
AC_SUBST(XPMLIB)
if test "$XPMLIB" != "-lXpm"; then
@ -48,7 +48,7 @@ if test "$no_x" != "yes"; then
fi
dnl Checks for Slang
AC_CHECK_LIB(slang, init_SLang,[AC_DEFINE(HAVE_LIBSLANG) SLANGLIB="-lslang"])
AC_CHECK_LIB(slang, SLang_Version,[AC_DEFINE(HAVE_LIBSLANG) SLANGLIB="-lslang"])
AC_SUBST(SLANGLIB)
dnl Checks for GPM

6
doc/examples/apt.conf

@ -1,4 +1,4 @@
// $Id: apt.conf,v 1.4 1998/10/22 04:56:50 jgg Exp $
// $Id: apt.conf,v 1.5 1998/10/24 04:58:10 jgg Exp $
/* This file is an index of all APT configuration directives. It should
NOT actually be used as a real config file, though it is a completely
valid file.
@ -14,6 +14,8 @@ APT {
Fix-Broken "false";
Show-Upgraded "false";
};
Ingore-Hold "false";
};
Acquire
@ -39,7 +41,7 @@ Dir
};
Etc "/etc/apt/" {
sourcelist "sources.list";
sourcelist "sources.list.test";
main "apt.conf";
};

Loading…
Cancel
Save