~ubuntu-core-dev/synaptic/ubuntu

« back to all changes in this revision

Viewing changes to common/rpackage.h

  • Committer: niemeyer
  • Date: 2003-02-02 17:10:39 UTC
  • Revision ID: gustavo@niemeyer.net-20030202171039-5fe39d63e4ac20f4
Importing current CVS code into trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* rpackage.h - wrapper for accessing package information
 
2
 * 
 
3
 * Copyright (c) 2000, 2001 Conectiva S/A 
 
4
 *               2002 Michael Vogt <mvo@debian.org>
 
5
 * 
 
6
 * Author: Alfredo K. Kojima <kojima@conectiva.com.br>
 
7
 *         Michael Vogt <mvo@debian.org>
 
8
 * 
 
9
 * Portions Taken from Gnome APT
 
10
 *   Copyright (C) 1998 Havoc Pennington <hp@pobox.com>
 
11
 * 
 
12
 *
 
13
 * This program is free software; you can redistribute it and/or 
 
14
 * modify it under the terms of the GNU General Public License as 
 
15
 * published by the Free Software Foundation; either version 2 of the
 
16
 * License, or (at your option) any later version.
 
17
 *
 
18
 * This program is distributed in the hope that it will be useful,
 
19
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
20
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
21
 * GNU General Public License for more details.
 
22
 *
 
23
 * You should have received a copy of the GNU General Public License
 
24
 * along with this program; if not, write to the Free Software
 
25
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 
26
 * USA
 
27
 */
 
28
 
 
29
 
 
30
 
 
31
#ifndef _RPACKAGE_H_
 
32
#define _RPACKAGE_H_
 
33
 
 
34
#include <vector>
 
35
 
 
36
#include <apt-pkg/pkgcache.h>
 
37
 
 
38
using namespace std;
 
39
 
 
40
class pkgDepCache;
 
41
class RPackageLister;
 
42
class pkgRecords;
 
43
 
 
44
 
 
45
class RPackage {
 
46
   RPackageLister *_lister;
 
47
   
 
48
   pkgRecords *_records;
 
49
   pkgDepCache *_depcache;
 
50
   pkgCache::PkgIterator *_package;
 
51
   bool _newPackage;
 
52
   bool _pinnedPackage;
 
53
   bool _orphanedPackage;
 
54
 
 
55
   // virtual pkgs provided by this one
 
56
   vector<pkgCache::PkgIterator> _virtualPackages; 
 
57
   
 
58
   // stuff for enumerators
 
59
   int _vpackI;
 
60
   pkgCache::DepIterator _rdepI;
 
61
   
 
62
   pkgCache::DepIterator _wdepI;
 
63
   pkgCache::DepIterator _wdepStart;
 
64
   pkgCache::DepIterator _wdepEnd;
 
65
   
 
66
   pkgCache::DepIterator _depI;
 
67
   pkgCache::DepIterator _depStart;
 
68
   pkgCache::DepIterator _depEnd;
 
69
 
 
70
   bool isShallowDependency(RPackage *pkg);
 
71
 
 
72
   bool isWeakDep(pkgCache::DepIterator &dep);
 
73
   
 
74
public:
 
75
   enum PackageStatus {
 
76
       SInstalledUpdated,
 
77
       SInstalledOutdated,
 
78
       SInstalledBroken, // installed but broken           
 
79
       SNotInstalled
 
80
   };
 
81
   
 
82
   enum MarkedStatus {
 
83
       MKeep,
 
84
       MInstall,
 
85
       MUpgrade,
 
86
       MDowngrade,
 
87
       MRemove,
 
88
       MHeld,
 
89
       MBroken,
 
90
       MPinned, /* only used for the pixmap position (make this go away) */
 
91
       MNew     /* only used for the pixmap position (make this go away) */
 
92
   };
 
93
 
 
94
   enum OtherStatus {
 
95
     OOrphaned       = 1<<0,
 
96
     OPinned         = 1<<1, /* apt-pined */
 
97
     ONew            = 1<<2,
 
98
     OResidualConfig = 1<<3
 
99
   };
 
100
   
 
101
   enum UpdateImportance {
 
102
       IUnknown,
 
103
       INormal,
 
104
       ICritical,
 
105
       ISecurity
 
106
   };
 
107
   
 
108
   pkgCache::PkgIterator *package() { return _package; };
 
109
   
 
110
 
 
111
   inline const char *name() { return _package->Name(); };
 
112
   
 
113
   const char *section();
 
114
   const char *priority();
 
115
 
 
116
   const string summary();
 
117
   const char *description();
 
118
 
 
119
   bool isImportant();
 
120
 
 
121
   bool downloadable();
 
122
   
 
123
   const char *availableDownloadableVersion();
 
124
   
 
125
   const string maintainer();
 
126
   const char *vendor();
 
127
   
 
128
   const char *installedVersion();
 
129
   long installedSize();
 
130
 
 
131
   // if this is an update
 
132
   UpdateImportance updateImportance();
 
133
   const char *updateSummary();
 
134
   const char *updateDate();
 
135
   const char *updateURL();
 
136
 
 
137
   // relative to version that would be installed
 
138
   const char *availableVersion();
 
139
   long availableSize();
 
140
   long availableDownloadableSize();
 
141
 
 
142
   long packageDownloadableSize();
 
143
   long packageSize();
 
144
 
 
145
   // special case: alway get the deps of the latest available version
 
146
   // (not necessary the installed one)
 
147
   bool enumAvailDeps(const char *&type, const char *&what, const char *&pkg,
 
148
                 const char *&which, char *&summary, bool &satisfied);
 
149
 
 
150
   // installed package if installed, scheduled/candidate if not or if marked
 
151
   bool enumDeps(const char *&type, const char *&what, const char *&pkg,
 
152
                 const char *&which, char *&summary, bool &satisfied);
 
153
   bool nextDeps(const char *&type, const char *&what, const char *&pkg,
 
154
                 const char *&which, char *&summary, bool &satisfied);
 
155
 
 
156
   // reverse dependencies
 
157
   bool enumRDeps(const char *&dep, const char *&what);
 
158
   bool nextRDeps(const char *&dep, const char *&what);
 
159
   
 
160
   // weak dependencies
 
161
   bool enumWDeps(const char *&type, const char *&what, bool &satisfied);
 
162
   bool nextWDeps(const char *&type, const char *&what, bool &satisfied);
 
163
 
 
164
   // current status query
 
165
   PackageStatus getStatus();
 
166
 
 
167
   // selected status query
 
168
   MarkedStatus getMarkedStatus();
 
169
 
 
170
   // other information about the package (bitwise encoded in the returned int)
 
171
   int getOtherStatus();
 
172
 
 
173
   bool wouldBreak();
 
174
 
 
175
   void inline setNew(bool isNew=true) { _newPackage=isNew; };
 
176
   void setPinned(bool flag);
 
177
   void setOrphaned(bool flag=true) { _orphanedPackage=flag; };
 
178
 
 
179
   // change status
 
180
   void setKeep();
 
181
   void setInstall();
 
182
   void setRemove(bool purge = false); //XXX: purge for debian
 
183
 
 
184
   // shallow doesnt remove things other pkgs depend on
 
185
   void setRemoveWithDeps(bool shallow, bool purge=false);
 
186
   
 
187
   void addVirtualPackage(pkgCache::PkgIterator dep);
 
188
 
 
189
   RPackage(RPackageLister *lister, pkgDepCache *depcache, pkgRecords *records,
 
190
            pkgCache::PkgIterator &pkg);
 
191
   ~RPackage();
 
192
};
 
193
 
 
194
#endif