Browse Source

Bug fixes

Author: jgg
Date: 1999-09-30 06:30:34 GMT
Bug fixes
tags/debian/0.7.21
Arch Librarian 17 years ago
parent
commit
421c8d1099
11 changed files with 238 additions and 127 deletions
  1. +40
    -25
      apt-pkg/algorithms.cc
  2. +40
    -1
      apt-pkg/contrib/fileutl.cc
  3. +2
    -1
      apt-pkg/contrib/fileutl.h
  4. +10
    -3
      apt-pkg/deb/deblistparser.cc
  5. +21
    -10
      apt-pkg/packagemanager.cc
  6. +5
    -1
      apt-pkg/sourcelist.cc
  7. +14
    -15
      cmdline/apt-get.cc
  8. +1
    -1
      configure.in
  9. +12
    -2
      debian/changelog
  10. +8
    -2
      test/makefile
  11. +85
    -66
      test/scratch.cc

+ 40
- 25
apt-pkg/algorithms.cc View File

@@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: algorithms.cc,v 1.23 1999/07/30 02:54:25 jgg Exp $
// $Id: algorithms.cc,v 1.24 1999/09/30 06:30:34 jgg Exp $
/* ######################################################################

Algorithms - A set of misc algorithms
@@ -715,13 +715,18 @@ bool pkgProblemResolver::Resolve(bool BrokenFix)
// Isolate the problem dependency
PackageKill KillList[100];
PackageKill *LEnd = KillList;
for (pkgCache::DepIterator D = Cache[I].InstVerIter(Cache).DependsList(); D.end() == false;)
bool InOr = false;
pkgCache::DepIterator Start;
pkgCache::DepIterator End;
for (pkgCache::DepIterator D = Cache[I].InstVerIter(Cache).DependsList();
D.end() == false || InOr == true;)
{
// Compute a single dependency element (glob or)
pkgCache::DepIterator Start;
pkgCache::DepIterator End;
D.GlobOr(Start,End);
if (InOr == false)
D.GlobOr(Start,End);
else
Start++;

// We only worry about critical deps.
if (End.IsCritical() != true)
continue;
@@ -730,25 +735,27 @@ bool pkgProblemResolver::Resolve(bool BrokenFix)
if ((Cache[End] & pkgDepCache::DepGInstall) == pkgDepCache::DepGInstall)
continue;
InOr = Start != End;
// Hm, the group is broken.. I have no idea how to handle this
if (Start != End)
/* if (Start != End)
{
if (Debug == true)
clog << "Note, a broken or group was found in " << I.Name() << "." << endl;
if ((Flags[I->ID] & Protected) != Protected)
Cache.MarkDelete(I);
break;
}
}*/
if (Debug == true)
clog << "Package " << I.Name() << " has broken dep on " << End.TargetPkg().Name() << endl;
clog << "Package " << I.Name() << " has broken dep on " << Start.TargetPkg().Name() << endl;

/* Look across the version list. If there are no possible
targets then we keep the package and bail. This is necessary
if a package has a dep on another package that cant be found */
pkgCache::Version **VList = End.AllTargets();
pkgCache::Version **VList = Start.AllTargets();
if (*VList == 0 && (Flags[I->ID] & Protected) != Protected &&
End->Type != pkgCache::Dep::Conflicts &&
Start->Type != pkgCache::Dep::Conflicts &&
Cache[I].NowBroken() == false)
{
Change = true;
@@ -763,10 +770,10 @@ bool pkgProblemResolver::Resolve(bool BrokenFix)
pkgCache::PkgIterator Pkg = Ver.ParentPkg();
if (Debug == true)
clog << " Considering " << Pkg.Name() << ' ' << (int)Scores[Pkg->ID] <<
clog << " Considering " << Pkg.Name() << ' ' << (int)Scores[Pkg->ID] <<
" as a solution to " << I.Name() << ' ' << (int)Scores[I->ID] << endl;
if (Scores[I->ID] <= Scores[Pkg->ID] ||
((Cache[End] & pkgDepCache::DepGNow) == 0 &&
((Cache[Start] & pkgDepCache::DepNow) == 0 &&
End->Type != pkgCache::Dep::Conflicts))
{
// Try a little harder to fix protected packages..
@@ -783,17 +790,21 @@ bool pkgProblemResolver::Resolve(bool BrokenFix)
if (Cache[I].InstBroken() == false)
{
if (Debug == true)
clog << " Holding Back " << I.Name() << " rather than change " << End.TargetPkg().Name() << endl;
clog << " Holding Back " << I.Name() << " rather than change " << Start.TargetPkg().Name() << endl;
}
else
{
{
if (BrokenFix == false || DoUpgrade(I) == false)
{
if (Debug == true)
clog << " Removing " << I.Name() << " rather than change " << End.TargetPkg().Name() << endl;
Cache.MarkDelete(I);
if (Counter > 1)
Scores[I->ID] = Scores[Pkg->ID];
// Consider other options
if (InOr == false)
{
if (Debug == true)
clog << " Removing " << I.Name() << " rather than change " << Start.TargetPkg().Name() << endl;
Cache.MarkDelete(I);
if (Counter > 1)
Scores[I->ID] = Scores[Pkg->ID];
}
}
}
@@ -811,25 +822,25 @@ bool pkgProblemResolver::Resolve(bool BrokenFix)
LEnd->Dep = End;
LEnd++;
if (End->Type != pkgCache::Dep::Conflicts)
if (Start->Type != pkgCache::Dep::Conflicts)
break;
}
}

// Hm, nothing can possibly satisify this dep. Nuke it.
if (VList[0] == 0 && End->Type != pkgCache::Dep::Conflicts &&
(Flags[I->ID] & Protected) != Protected)
if (VList[0] == 0 && Start->Type != pkgCache::Dep::Conflicts &&
(Flags[I->ID] & Protected) != Protected && InOr == false)
{
Cache.MarkKeep(I);
if (Cache[I].InstBroken() == false)
{
if (Debug == true)
clog << " Holding Back " << I.Name() << " because I can't find " << End.TargetPkg().Name() << endl;
clog << " Holding Back " << I.Name() << " because I can't find " << Start.TargetPkg().Name() << endl;
}
else
{
if (Debug == true)
clog << " Removing " << I.Name() << " because I can't find " << End.TargetPkg().Name() << endl;
clog << " Removing " << I.Name() << " because I can't find " << Start.TargetPkg().Name() << endl;
Cache.MarkDelete(I);
}

@@ -837,6 +848,10 @@ bool pkgProblemResolver::Resolve(bool BrokenFix)
Done = true;
}
// Try some more
if (InOr == true)
continue;
delete [] VList;
if (Done == true)
break;


+ 40
- 1
apt-pkg/contrib/fileutl.cc View File

@@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: fileutl.cc,v 1.30 1999/07/26 17:46:08 jgg Exp $
// $Id: fileutl.cc,v 1.31 1999/09/30 06:30:34 jgg Exp $
/* ######################################################################
File Utilities
@@ -150,6 +150,45 @@ string flNotFile(string File)
return string(File,0,Res);
}
/*}}}*/
// flNoLink - If file is a symlink then deref it /*{{{*/
// ---------------------------------------------------------------------
/* If the name is not a link then the returned path is the input. */
string flNoLink(string File)
{
struct stat St;
if (lstat(File.c_str(),&St) != 0 || S_ISLNK(St.st_mode) == 0)
return File;
if (stat(File.c_str(),&St) != 0)
return File;
/* Loop resolving the link. There is no need to limit the number of
loops because the stat call above ensures that the symlink is not
circular */
char Buffer[1024];
string NFile = File;
while (1)
{
// Read the link
int Res;
if ((Res = readlink(NFile.c_str(),Buffer,sizeof(Buffer))) <= 0 ||
(unsigned)Res >= sizeof(Buffer))
return File;
// Append or replace the previous path
Buffer[Res] = 0;
if (Buffer[0] == '/')
NFile = Buffer;
else
NFile = flNotFile(NFile) + Buffer;
// See if we are done
if (lstat(NFile.c_str(),&St) != 0)
return File;
if (S_ISLNK(St.st_mode) == 0)
return NFile;
}
}
/*}}}*/
// SetCloseExec - Set the close on exec flag /*{{{*/
// ---------------------------------------------------------------------
/* */


+ 2
- 1
apt-pkg/contrib/fileutl.h View File

@@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: fileutl.h,v 1.21 1999/07/26 17:46:08 jgg Exp $
// $Id: fileutl.h,v 1.22 1999/09/30 06:30:34 jgg Exp $
/* ######################################################################
File Utilities
@@ -83,5 +83,6 @@ bool ExecWait(int Pid,const char *Name,bool Reap = false);
// File string manipulators
string flNotDir(string File);
string flNotFile(string File);
string flNoLink(string File);

#endif

+ 10
- 3
apt-pkg/deb/deblistparser.cc View File

@@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: deblistparser.cc,v 1.22 1999/07/30 02:54:25 jgg Exp $
// $Id: deblistparser.cc,v 1.23 1999/09/30 06:30:34 jgg Exp $
/* ######################################################################
Package Cache Generator - Generator for the cache structure.
@@ -88,7 +88,7 @@ bool debListParser::NewVersion(pkgCache::VerIterator Ver)
{"extra",pkgCache::State::Extra}};
if (GrabWord(string(Start,Stop-Start),PrioList,
_count(PrioList),Ver->Priority) == false)
return _error->Error("Malformed Priority line");
Ver->Priority = pkgCache::State::Extra;
}

if (ParseDepends(Ver,"Depends",pkgCache::Dep::Depends) == false)
@@ -154,11 +154,18 @@ unsigned short debListParser::VersionHash()
continue;
/* Strip out any spaces from the text, this undoes dpkgs reformatting
of certain fields */
of certain fields. dpkg also has the rather interesting notion of
reformatting depends operators < -> <= */
char *I = S;
for (; Start != End; Start++)
{
if (isspace(*Start) == 0)
*I++ = tolower(*Start);
if (*Start == '<' && Start[1] != '<' && Start[1] != '=')
*I++ = '=';
if (*Start == '>' && Start[1] != '>' && Start[1] != '=')
*I++ = '=';
}
Result = AddCRC16(Result,S,I - S);
}


+ 21
- 10
apt-pkg/packagemanager.cc View File

@@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: packagemanager.cc,v 1.20 1999/08/12 05:59:54 jgg Exp $
// $Id: packagemanager.cc,v 1.21 1999/09/30 06:30:34 jgg Exp $
/* ######################################################################

Package Manager - Abstacts the package manager
@@ -414,12 +414,17 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg)
/* See if this packages install version has any predependencies
that are not met by 'now' packages. */
for (DepIterator D = Cache[Pkg].InstVerIter(Cache).DependsList();
D.end() == false; D++)
D.end() == false; )
{
if (D->Type == pkgCache::Dep::PreDepends)
// Compute a single dependency element (glob or)
pkgCache::DepIterator Start;
pkgCache::DepIterator End;
D.GlobOr(Start,End);
while (End->Type == pkgCache::Dep::PreDepends)
{
// Look for possible ok targets.
Version **VList = D.AllTargets();
Version **VList = Start.AllTargets();
bool Bad = true;
for (Version **I = VList; *I != 0 && Bad == true; I++)
{
@@ -450,18 +455,24 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg)
}
delete [] VList;
if (Bad == true)
return _error->Error("Internal Error, Couldn't configure a pre-depend");

continue;
/* If this or element did not match then continue on to the
next or element until a matching element is found*/
if (Bad == true)
{
if (Start == End)
return _error->Error("Internal Error, Couldn't configure a pre-depend");
Start++;
}
else
break;
}
if (D->Type == pkgCache::Dep::Conflicts)
if (End->Type == pkgCache::Dep::Conflicts)
{
/* Look for conflicts. Two packages that are both in the install
state cannot conflict so we don't check.. */
Version **VList = D.AllTargets();
Version **VList = End.AllTargets();
for (Version **I = VList; *I != 0; I++)
{
VerIterator Ver(Cache,*I);


+ 5
- 1
apt-pkg/sourcelist.cc View File

@@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: sourcelist.cc,v 1.15 1999/09/09 06:15:51 jgg Exp $
// $Id: sourcelist.cc,v 1.16 1999/09/30 06:30:34 jgg Exp $
/* ######################################################################

List of Sources
@@ -172,6 +172,8 @@ string pkgSourceList::Item::PackagesURI() const
{
if (Dist != "/")
Res = URI + Dist;
else
Res = URI;
}
else
Res = URI + "dists/" + Dist + '/' + Section +
@@ -240,6 +242,8 @@ string pkgSourceList::Item::ReleaseURI() const
{
if (Dist != "/")
Res = URI + Dist;
else
Res = URI;
}
else
Res = URI + "dists/" + Dist + '/' + Section +


+ 14
- 15
cmdline/apt-get.cc View File

@@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: apt-get.cc,v 1.76 1999/09/16 02:08:09 jgg Exp $
// $Id: apt-get.cc,v 1.77 1999/09/30 06:30:34 jgg Exp $
/* ######################################################################
apt-get - Cover for dpkg
@@ -154,7 +154,7 @@ bool ShowList(ostream &out,string Title,string List)
/* This prints out the names of all the packages that are broken along
with the name of each each broken dependency and a quite version
description. */
void ShowBroken(ostream &out,CacheFile &Cache)
void ShowBroken(ostream &out,CacheFile &Cache,bool Now)
{
out << "Sorry, but the following packages have unmet dependencies:" << endl;
for (unsigned J = 0; J < Cache->Head().PackageCount; J++)
@@ -198,15 +198,14 @@ void ShowBroken(ostream &out,CacheFile &Cache)
")";
/* Show a summary of the target package if possible. In the case
of virtual packages we show nothing */
of virtual packages we show nothing */
pkgCache::PkgIterator Targ = End.TargetPkg();
if (Targ->ProvidesList == 0)
{
out << " but ";
pkgCache::VerIterator Ver = Cache[Targ].InstVerIter(Cache);
if (Ver.end() == false)
out << Ver.VerStr() << " is installed";
out << Ver.VerStr() << (Now?" is installed":" is to be installed");
else
{
if (Cache[Targ].CandidateVerIter(Cache).end() == true)
@@ -217,7 +216,7 @@ void ShowBroken(ostream &out,CacheFile &Cache)
out << "it is a virtual package";
}
else
out << "it is not installed";
out << (Now?"it is not installed":"it is not going to be installed");
}
}
@@ -467,7 +466,7 @@ bool CacheFile::CheckDeps(bool AllowBroken)
if (pkgFixBroken(*Cache) == false || Cache->BrokenCount() != 0)
{
c1out << " failed." << endl;
ShowBroken(c1out,*this);
ShowBroken(c1out,*this,true);

return _error->Error("Unable to correct dependencies");
}
@@ -479,7 +478,7 @@ bool CacheFile::CheckDeps(bool AllowBroken)
else
{
c1out << "You might want to run `apt-get -f install' to correct these." << endl;
ShowBroken(c1out,*this);
ShowBroken(c1out,*this,true);

return _error->Error("Unmet dependencies. Try using -f.");
}
@@ -522,7 +521,7 @@ bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask = true,bool Saftey =
// Sanity check
if (Cache->BrokenCount() != 0)
{
ShowBroken(c1out,Cache);
ShowBroken(c1out,Cache,false);
return _error->Error("Internal Error, InstallPackages was called with broken packages!");
}

@@ -810,7 +809,7 @@ bool DoUpgrade(CommandLine &CmdL)
// Do the upgrade
if (pkgAllUpgrade(Cache) == false)
{
ShowBroken(c1out,Cache);
ShowBroken(c1out,Cache,false);
return _error->Error("Internal Error, AllUpgrade broke stuff");
}
@@ -953,7 +952,7 @@ bool DoInstall(CommandLine &CmdL)
if (BrokenFix == true && Cache->BrokenCount() != 0)
{
c1out << "You might want to run `apt-get -f install' to correct these:" << endl;
ShowBroken(c1out,Cache);
ShowBroken(c1out,Cache,false);

return _error->Error("Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).");
}
@@ -980,7 +979,7 @@ bool DoInstall(CommandLine &CmdL)

c1out << "The following information may help to resolve the situation:" << endl;
c1out << endl;
ShowBroken(c1out,Cache);
ShowBroken(c1out,Cache,false);
return _error->Error("Sorry, broken packages");
}
@@ -1027,7 +1026,7 @@ bool DoDistUpgrade(CommandLine &CmdL)
if (pkgDistUpgrade(*Cache) == false)
{
c0out << "Failed" << endl;
ShowBroken(c1out,Cache);
ShowBroken(c1out,Cache,false);
return false;
}
@@ -1095,7 +1094,7 @@ bool DoDSelectUpgrade(CommandLine &CmdL)
if (Fix.Resolve() == false)
{
ShowBroken(c1out,Cache);
ShowBroken(c1out,Cache,false);
return _error->Error("Internal Error, problem resolver broke stuff");
}
}
@@ -1103,7 +1102,7 @@ bool DoDSelectUpgrade(CommandLine &CmdL)
// Now upgrade everything
if (pkgAllUpgrade(Cache) == false)
{
ShowBroken(c1out,Cache);
ShowBroken(c1out,Cache,false);
return _error->Error("Internal Error, problem resolver broke stuff");
}


+ 1
- 1
configure.in View File

@@ -17,7 +17,7 @@ AC_CONFIG_AUX_DIR(buildlib)
AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in)

dnl -- SET THIS TO THE RELEASE VERSION --
AC_DEFINE_UNQUOTED(VERSION,"0.3.12")
AC_DEFINE_UNQUOTED(VERSION,"0.3.12.1")
AC_DEFINE_UNQUOTED(PACKAGE,"apt")

dnl Tom's host stuff


+ 12
- 2
debian/changelog View File

@@ -1,10 +1,20 @@
apt (0.3.13.1) unstable; urgency=low

* Fix Perl or group pre-depends thing Closes: #46091, #46096, #46233
* Fix handling of dpkg's conversions from < -> <= Closes: #46094
* Make unparsable priorities non-fatal Closes: #46266, #46267
* Fix handling of '/' for the dist name. Closes: #43830, #45640, #45692
-- Jason Gunthorpe <jgg@debian.org> Fri, 3 Sep 1999 09:04:28 -0700
apt (0.3.12.1) unstable; urgency=low
* Fix timestamp miss in FTP. Closes: #44363
* Fix sorting of Kept packages. Closes: #44377
* Fix Segfault for dselect-upgrade. Closes: #44436
* Fix handling of '/' for the dist name. Closes #43830
* Added APT::Get::Diff-Only and Tar-Only options. Closes #44384
* Added APT::Get::Diff-Only and Tar-Only options. Closes: #44384
* Fix dpkg-preexec. Closes: #44706
-- Jason Gunthorpe <jgg@debian.org> Fri, 3 Sep 1999 09:04:28 -0700


+ 8
- 2
test/makefile View File

@@ -13,11 +13,17 @@ include $(PROGRAM_H)

# Scratch program to test incomplete code fragments in
PROGRAM=scratch-test
SLIBS = -lapt-pkg
LIB_MAKES = apt-pkg/makefile
SLIBS = -lapt-inst -lapt-pkg
LIB_MAKES = apt-pkg/makefile apt-inst/makefile
SOURCE = scratch.cc
include $(PROGRAM_H)

PROGRAM=testextract
SLIBS = -lapt-inst -lapt-pkg
LIB_MAKES = apt-pkg/makefile apt-inst/makefile
SOURCE = testextract.cc
include $(PROGRAM_H)

# Version compare tester
PROGRAM=versiontest
SLIBS = -lapt-pkg


+ 85
- 66
test/scratch.cc View File

@@ -1,83 +1,102 @@
#include <string>
/*void basic_string<char,string_char_traits<char>,alloc>::Rep::release()
{
cout << "Release " << (void *)this << ' ' << ref << endl;
if (--ref == 0) delete this;
}

basic_string<char,string_char_traits<char>,alloc>::~basic_string()
{
cout << "Destroy " << (void *)this << ',' << rep()->ref << endl;
rep ()->release ();
}*/



#include <apt-pkg/tagfile.h>
#include <apt-pkg/strutl.h>

#include <apt-pkg/cachefile.h>
#include <apt-pkg/pkgrecords.h>
#include <apt-pkg/dpkgdb.h>
#include <apt-pkg/debfile.h>
#include <apt-pkg/error.h>
#include <apt-pkg/configuration.h>
#include <apt-pkg/progress.h>
#include <apt-pkg/extract.h>
#include <apt-pkg/init.h>

#include <signal.h>
#include <stdio.h>
#include <malloc.h>

struct Rep
{
size_t len, res, ref;
bool selfish;
};
#include <apt-pkg/fileutl.h>

int main(int argc,char *argv[])
{
pkgCacheFile Cache;
OpProgress Prog;
pkgInitialize(*_config);
if (Cache.Open(Prog,false) == false)

cout << flNoLink(argv[1]) << endl;
#if 0
/* DynamicMMap *FileMap = new DynamicMMap(MMap::Public);
pkgFLCache *FList = new pkgFLCache(*FileMap);
char *Name = "/tmp/test";
pkgFLCache::PkgIterator Pkg(*FList,0);
pkgFLCache::NodeIterator Node = FList->GetNode(Name,Name+strlen(Name),Pkg.Offset(),true,false);
cout << (pkgFLCache::Node *)Node << endl;
Node = FList->GetNode(Name,Name+strlen(Name),Pkg.Offset(),true,false);
cout << (pkgFLCache::Node *)Node << endl;
*/
// #if 0
_config->Set("Dir::State::status","/tmp/testing/status");

debDpkgDB Db;
{
OpTextProgress Prog;
if (Db.ReadyPkgCache(Prog) == false)
cerr << "Error!" << endl;
Prog.Done();
if (Db.ReadyFileList(Prog) == false)
cerr << "Error!" << endl;
}
if (_error->PendingError() == true)
{
_error->DumpErrors();
return 0;
}
pkgRecords rec(*Cache);
while (1)
/* Db.GetFLCache().BeginDiverLoad();
pkgFLCache::PkgIterator Pkg(Db.GetFLCache(),0);
if (Db.GetFLCache().AddDiversion(Pkg,"/usr/include/linux/kerneld.h","/usr/bin/nslookup") == false)
cerr << "Error!" << endl;

const char *Tmp = "/usr/include/linux/kerneld.h";
pkgFLCache::NodeIterator Nde = Db.GetFLCache().GetNode(Tmp,Tmp+strlen(Tmp),0,false,false);
map_ptrloc Loc = Nde->File;
for (; Nde.end() == false && Nde->File == Loc; Nde++)
cout << Nde->Flags << ',' << Nde->Pointer << ',' << Nde.File() << endl;
Db.GetFLCache().FinishDiverLoad();*/

/* unsigned int I = 0;
pkgFLCache &Fl = Db.GetFLCache();
while (I < Fl.HeaderP->HashSize)
{
cout << I << endl;
pkgFLCache::NodeIterator Node(Fl,Fl.NodeP + Fl.HeaderP->FileHash + I++);
if (Node->Pointer == 0)
continue;
for (; Node.end() == false; Node++)
{
cout << Node.DirN() << '/' << Node.File();
if (Node->Flags == pkgFLCache::Node::Diversion)
cout << " (div)";
if (Node->Flags == pkgFLCache::Node::ConfFile)
cout << " (conf)";
cout << endl;
}
}*/

for (int I = 1; I < argc; I++)
{
pkgCache::VerIterator V = (*Cache)[Cache->PkgBegin()].CandidateVerIter(*Cache);
pkgRecords::Parser &Parse = rec.Lookup(V.FileList());
string Foo = Parse.ShortDesc();
FileFd F(argv[I],FileFd::ReadOnly);
debDebFile Deb(F);
cout << (reinterpret_cast<Rep *>(Foo.begin()) - 1)[0].ref << endl;
if (Deb.ExtractControl(Db) == false)
cerr << "Error!" << endl;
cout << argv[I] << endl;
// cout << Foo << endl;
pkgCache::VerIterator Ver = Deb.MergeControl(Db);
if (Ver.end() == true)
cerr << "Failed" << endl;
else
cout << Ver.ParentPkg().Name() << ' ' << Ver.VerStr() << endl;
// cout << rec.Lookup(V.FileList()).ShortDesc() << endl;
malloc_stats();
pkgExtract Extract(Db.GetFLCache(),Ver);
Deb.ExtractArchive(Extract);
}
#if 0
URI U(argv[1]);
cout << U.Access << endl;
cout << U.User << endl;
cout << U.Password << endl;
cout << U.Host << endl;
cout << U.Path << endl;
cout << U.Port << endl;
/*
FileFd F(argv[1],FileFd::ReadOnly);
pkgTagFile Reader(F);
pkgTagSection Sect;
while (Reader.Step(Sect) == true)
{
Sect.FindS("Package");
Sect.FindS("Section");
Sect.FindS("Version");
Sect.FindI("Size");
};*/
#endif
return 0;
// #endif
#endif
_error->DumpErrors();
}

Loading…
Cancel
Save