~donkult/apt/experimental

« back to all changes in this revision

Viewing changes to apt-pkg/packagemanager.cc

  • Committer: Arch Librarian
  • Date: 2004-09-20 16:51:33 UTC
  • Revision ID: Arch-1:apt@arch.ubuntu.com%apt--MAIN--0--patch-104
Dselect support
Author: jgg
Date: 1998-11-22 23:37:03 GMT
Dselect support

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
// -*- mode: cpp; mode: fold -*-
2
2
// Description                                                          /*{{{*/
3
 
// $Id: packagemanager.cc,v 1.6 1998/11/22 03:20:33 jgg Exp $
 
3
// $Id: packagemanager.cc,v 1.7 1998/11/22 23:37:05 jgg Exp $
4
4
/* ######################################################################
5
5
 
6
6
   Package Manager - Abstacts the package manager
51
51
bool pkgPackageManager::GetArchives(pkgAcquire *Owner,pkgSourceList *Sources,
52
52
                                    pkgRecords *Recs)
53
53
{
54
 
   pkgCache::PkgIterator I = Cache.PkgBegin();
55
 
   for (;I.end() != true; I++)
56
 
   {      
57
 
      // Not interesting
58
 
      if ((Cache[I].InstallVer == (pkgCache::Version *)I.CurrentVer() &&
59
 
           I.State() != pkgCache::PkgIterator::NeedsUnpack) ||
60
 
          Cache[I].Delete() == true)
 
54
   if (CreateOrderList() == false)
 
55
      return false;
 
56
   
 
57
   if (List->OrderUnpack() == false)
 
58
      return _error->Error("Internal ordering error");
 
59
 
 
60
   for (pkgOrderList::iterator I = List->begin(); I != List->end(); I++)
 
61
   {
 
62
      PkgIterator Pkg(Cache,*I);
 
63
 
 
64
      // Skip packages to erase
 
65
      if (Cache[Pkg].Delete() == true)
61
66
         continue;
62
67
      
63
 
      new pkgAcqArchive(Owner,Sources,Recs,Cache[I].InstVerIter(Cache),
64
 
                        FileNames[I->ID]);
 
68
      new pkgAcqArchive(Owner,Sources,Recs,Cache[Pkg].InstVerIter(Cache),
 
69
                        FileNames[Pkg->ID]);
65
70
   }
 
71
 
66
72
   return true;
67
73
}
68
74
                                                                        /*}}}*/
88
94
}
89
95
                                                                        /*}}}*/
90
96
 
 
97
// PM::CreateOrderList - Create the ordering class                      /*{{{*/
 
98
// ---------------------------------------------------------------------
 
99
/* This populates the ordering list with all the packages that are
 
100
   going to change. */
 
101
bool pkgPackageManager::CreateOrderList()
 
102
{
 
103
   delete List;
 
104
   List = new pkgOrderList(Cache);
 
105
   
 
106
   // Generate the list of affected packages and sort it
 
107
   for (PkgIterator I = Cache.PkgBegin(); I.end() == false; I++)
 
108
   {
 
109
      // Consider all depends
 
110
      if ((I->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential)
 
111
      {
 
112
         List->Flag(I,pkgOrderList::Immediate);
 
113
         if (Cache[I].InstallVer != 0)
 
114
            for (DepIterator D = Cache[I].InstVerIter(Cache).DependsList(); 
 
115
                 D.end() == false; D++)
 
116
               if (D->Type == pkgCache::Dep::Depends || D->Type == pkgCache::Dep::PreDepends)
 
117
                  List->Flag(D.TargetPkg(),pkgOrderList::Immediate);
 
118
         if (I->CurrentVer != 0)
 
119
            for (DepIterator D = I.CurrentVer().DependsList(); 
 
120
                 D.end() == false; D++)
 
121
               if (D->Type == pkgCache::Dep::Depends || D->Type == pkgCache::Dep::PreDepends)
 
122
                  List->Flag(D.TargetPkg(),pkgOrderList::Immediate);
 
123
      }
 
124
      
 
125
      // Not interesting
 
126
      if ((Cache[I].Keep() == true || 
 
127
          Cache[I].InstVerIter(Cache) == I.CurrentVer()) && 
 
128
          I.State() == pkgCache::PkgIterator::NeedsNothing)
 
129
         continue;
 
130
      
 
131
      // Append it to the list
 
132
      List->push_back(I);
 
133
      
 
134
      if ((I->Flags & pkgCache::Flag::ImmediateConf) == pkgCache::Flag::ImmediateConf)
 
135
         List->Flag(I,pkgOrderList::Immediate);
 
136
   }
 
137
   
 
138
   return true;
 
139
}
 
140
                                                                        /*}}}*/
91
141
// PM::DepAlwaysTrue - Returns true if this dep is irrelevent           /*{{{*/
92
142
// ---------------------------------------------------------------------
93
143
/* The restriction on provides is to eliminate the case when provides
412
462
/* */
413
463
bool pkgPackageManager::OrderInstall()
414
464
{
415
 
   delete List;
416
 
   List = new pkgOrderList(Cache);
 
465
   if (CreateOrderList() == false)
 
466
      return false;
417
467
   
418
 
   // Generate the list of affected packages and sort it
419
 
   for (PkgIterator I = Cache.PkgBegin(); I.end() == false; I++)
420
 
   {
421
 
      // Consider all depends
422
 
      if ((I->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential)
423
 
      {
424
 
         List->Flag(I,pkgOrderList::Immediate);
425
 
         if (Cache[I].InstallVer != 0)
426
 
            for (DepIterator D = Cache[I].InstVerIter(Cache).DependsList(); 
427
 
                 D.end() == false; D++)
428
 
               if (D->Type == pkgCache::Dep::Depends || D->Type == pkgCache::Dep::PreDepends)
429
 
                  List->Flag(D.TargetPkg(),pkgOrderList::Immediate);
430
 
         if (I->CurrentVer != 0)
431
 
            for (DepIterator D = I.CurrentVer().DependsList(); 
432
 
                 D.end() == false; D++)
433
 
               if (D->Type == pkgCache::Dep::Depends || D->Type == pkgCache::Dep::PreDepends)
434
 
                  List->Flag(D.TargetPkg(),pkgOrderList::Immediate);
435
 
      }
436
 
      
437
 
      // Not interesting
438
 
      if ((Cache[I].Keep() == true || 
439
 
          Cache[I].InstVerIter(Cache) == I.CurrentVer()) && 
440
 
          I.State() == pkgCache::PkgIterator::NeedsNothing)
441
 
         continue;
442
 
      
443
 
      // Append it to the list
444
 
      List->push_back(I);
445
 
      
446
 
      if ((I->Flags & pkgCache::Flag::ImmediateConf) == pkgCache::Flag::ImmediateConf)
447
 
         List->Flag(I,pkgOrderList::Immediate);
448
 
   }
449
 
 
450
468
   if (Debug == true)
451
469
      clog << "Begining to order" << endl;
452
470