1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>LCOV - lcov.info - /usr/include/apt-pkg/algorithms.h</title>
<link rel="stylesheet" type="text/css" href="../../../gcov.css">
</head>
<body>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="title">LTP GCOV extension - code coverage report</td></tr>
<tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding=1 border=0 width="100%">
<tr>
<td class="headerItem" width="20%">Current view:</td>
<td class="headerValue" width="80%" colspan=4><a href="../../../index.html">directory</a> - <a href="index.html">usr/include/apt-pkg</a> - algorithms.h</td>
</tr>
<tr>
<td class="headerItem" width="20%">Test:</td>
<td class="headerValue" width="80%" colspan=4>lcov.info</td>
</tr>
<tr>
<td class="headerItem" width="20%">Date:</td>
<td class="headerValue" width="20%">2008-08-14</td>
<td width="20%"></td>
<td class="headerItem" width="20%">Instrumented lines:</td>
<td class="headerValue" width="20%">3</td>
</tr>
<tr>
<td class="headerItem" width="20%">Code covered:</td>
<td class="headerValue" width="20%">66.7 %</td>
<td width="20%"></td>
<td class="headerItem" width="20%">Executed lines:</td>
<td class="headerValue" width="20%">2</td>
</tr>
</table>
</td>
</tr>
<tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
</table>
<table cellpadding=0 cellspacing=0 border=0>
<tr>
<td><br></td>
</tr>
<tr>
<td><pre class="source">
<span class="lineNum"> 1 </span> : // -*- mode: cpp; mode: fold -*-
<span class="lineNum"> 2 </span> : // Description /*{{{*/
<span class="lineNum"> 3 </span> : // $Id: algorithms.h,v 1.10 2001/05/22 04:17:41 jgg Exp $
<span class="lineNum"> 4 </span> : /* ######################################################################
<span class="lineNum"> 5 </span> :
<span class="lineNum"> 6 </span> : Algorithms - A set of misc algorithms
<span class="lineNum"> 7 </span> :
<span class="lineNum"> 8 </span> : This simulate class displays what the ordering code has done and
<span class="lineNum"> 9 </span> : analyses it with a fresh new dependency cache. In this way we can
<span class="lineNum"> 10 </span> : see all of the effects of an upgrade run.
<span class="lineNum"> 11 </span> :
<span class="lineNum"> 12 </span> : pkgDistUpgrade computes an upgrade that causes as many packages as
<span class="lineNum"> 13 </span> : possible to move to the newest verison.
<span class="lineNum"> 14 </span> :
<span class="lineNum"> 15 </span> : pkgApplyStatus sets the target state based on the content of the status
<span class="lineNum"> 16 </span> : field in the status file. It is important to get proper crash recovery.
<span class="lineNum"> 17 </span> :
<span class="lineNum"> 18 </span> : pkgFixBroken corrects a broken system so that it is in a sane state.
<span class="lineNum"> 19 </span> :
<span class="lineNum"> 20 </span> : pkgAllUpgrade attempts to upgade as many packages as possible but
<span class="lineNum"> 21 </span> : without installing new packages.
<span class="lineNum"> 22 </span> :
<span class="lineNum"> 23 </span> : The problem resolver class contains a number of complex algorithms
<span class="lineNum"> 24 </span> : to try to best-guess an upgrade state. It solves the problem of
<span class="lineNum"> 25 </span> : maximizing the number of install state packages while having no broken
<span class="lineNum"> 26 </span> : packages.
<span class="lineNum"> 27 </span> :
<span class="lineNum"> 28 </span> : ##################################################################### */
<span class="lineNum"> 29 </span> : /*}}}*/
<span class="lineNum"> 30 </span> : #ifndef PKGLIB_ALGORITHMS_H
<span class="lineNum"> 31 </span> : #define PKGLIB_ALGORITHMS_H
<span class="lineNum"> 32 </span> :
<span class="lineNum"> 33 </span> :
<span class="lineNum"> 34 </span> : #include <apt-pkg/packagemanager.h>
<span class="lineNum"> 35 </span> : #include <apt-pkg/depcache.h>
<span class="lineNum"> 36 </span> : #include <apt-pkg/acquire.h>
<span class="lineNum"> 37 </span> :
<span class="lineNum"> 38 </span> : #include <iostream>
<span class="lineNum"> 39 </span> :
<span class="lineNum"> 40 </span> : using std::ostream;
<span class="lineNum"> 41 </span> :
<span class="lineNum"> 42 </span> : class pkgSimulate : public pkgPackageManager
<span class="lineNum"> 43 </span> : {
<span class="lineNum"> 44 </span> : protected:
<span class="lineNum"> 45 </span> :
<span class="lineNum"> 46 </span> : class Policy : public pkgDepCache::Policy
<span class="lineNum"> 47 </span> : {
<span class="lineNum"> 48 </span> : pkgDepCache *Cache;
<span class="lineNum"> 49 </span> : public:
<span class="lineNum"> 50 </span> :
<span class="lineNum"> 51 </span> : virtual VerIterator GetCandidateVer(PkgIterator Pkg)
<span class="lineNum"> 52 </span> : {
<span class="lineNum"> 53 </span> : return (*Cache)[Pkg].CandidateVerIter(*Cache);
<span class="lineNum"> 54 </span> : }
<span class="lineNum"> 55 </span> :
<span class="lineNum"> 56 </span> : Policy(pkgDepCache *Cache) : Cache(Cache) {};
<span class="lineNum"> 57 </span> : };
<span class="lineNum"> 58 </span> :
<span class="lineNum"> 59 </span> : unsigned char *Flags;
<span class="lineNum"> 60 </span> :
<span class="lineNum"> 61 </span> : Policy iPolicy;
<span class="lineNum"> 62 </span> : pkgDepCache Sim;
<span class="lineNum"> 63 </span> :
<span class="lineNum"> 64 </span> : // The Actuall installation implementation
<span class="lineNum"> 65 </span> : virtual bool Install(PkgIterator Pkg,string File);
<span class="lineNum"> 66 </span> : virtual bool Configure(PkgIterator Pkg);
<span class="lineNum"> 67 </span> : virtual bool Remove(PkgIterator Pkg,bool Purge);
<span class="lineNum"> 68 </span> :
<span class="lineNum"> 69 </span> : private:
<span class="lineNum"> 70 </span> : void ShortBreaks();
<span class="lineNum"> 71 </span> : void Describe(PkgIterator iPkg,ostream &out,bool Current,bool Candidate);
<span class="lineNum"> 72 </span> :
<span class="lineNum"> 73 </span> : public:
<span class="lineNum"> 74 </span> :
<span class="lineNum"> 75 </span> : pkgSimulate(pkgDepCache *Cache);
<span class="lineNum"> 76 </span> : };
<span class="lineNum"> 77 </span> :
<span class="lineNum"> 78 </span> : class pkgProblemResolver
<span class="lineNum"> 79 </span> : {
<span class="lineNum"> 80 </span> : pkgDepCache &Cache;
<span class="lineNum"> 81 </span> : typedef pkgCache::PkgIterator PkgIterator;
<span class="lineNum"> 82 </span> : typedef pkgCache::VerIterator VerIterator;
<span class="lineNum"> 83 </span> : typedef pkgCache::DepIterator DepIterator;
<span class="lineNum"> 84 </span> : typedef pkgCache::PrvIterator PrvIterator;
<span class="lineNum"> 85 </span> : typedef pkgCache::Version Version;
<span class="lineNum"> 86 </span> : typedef pkgCache::Package Package;
<span class="lineNum"> 87 </span> :
<span class="lineNum"> 88 </span> : enum Flags {Protected = (1 << 0), PreInstalled = (1 << 1),
<span class="lineNum"> 89 </span> : Upgradable = (1 << 2), ReInstateTried = (1 << 3),
<span class="lineNum"> 90 </span> : ToRemove = (1 << 4)};
<span class="lineNum"> 91 </span> : signed short *Scores;
<span class="lineNum"> 92 </span> : unsigned char *Flags;
<span class="lineNum"> 93 </span> : bool Debug;
<span class="lineNum"> 94 </span> :
<span class="lineNum"> 95 </span> : // Sort stuff
<span class="lineNum"> 96 </span> : static pkgProblemResolver *This;
<span class="lineNum"> 97 </span> : static int ScoreSort(const void *a,const void *b);
<span class="lineNum"> 98 </span> :
<span class="lineNum"> 99 </span> : struct PackageKill
<span class="lineNum"> 100 </span> : {
<span class="lineNum"> 101 </span> : PkgIterator Pkg;
<span class="lineNum"> 102 </span> : DepIterator Dep;
<span class="lineNum"> 103 </span> : };
<span class="lineNum"> 104 </span> :
<span class="lineNum"> 105 </span> : void MakeScores();
<span class="lineNum"> 106 </span> : bool DoUpgrade(pkgCache::PkgIterator Pkg);
<span class="lineNum"> 107 </span> :
<span class="lineNum"> 108 </span> : public:
<span class="lineNum"> 109 </span> :
<span class="lineNum"> 110 </span><span class="lineCov"> 4 : inline void Protect(pkgCache::PkgIterator Pkg) {Flags[Pkg->ID] |= Protected;};</span>
<span class="lineNum"> 111 </span><span class="lineNoCov"> 0 : inline void Remove(pkgCache::PkgIterator Pkg) {Flags[Pkg->ID] |= ToRemove;};</span>
<span class="lineNum"> 112 </span><span class="lineCov"> 4 : inline void Clear(pkgCache::PkgIterator Pkg) {Flags[Pkg->ID] &= ~(Protected | ToRemove);};</span>
<span class="lineNum"> 113 </span> :
<span class="lineNum"> 114 </span> : // Try to intelligently resolve problems by installing and removing packages
<span class="lineNum"> 115 </span> : bool Resolve(bool BrokenFix = false);
<span class="lineNum"> 116 </span> :
<span class="lineNum"> 117 </span> : // Try to resolve problems only by using keep
<span class="lineNum"> 118 </span> : bool ResolveByKeep();
<span class="lineNum"> 119 </span> :
<span class="lineNum"> 120 </span> : // Install all protected packages
<span class="lineNum"> 121 </span> : void InstallProtect();
<span class="lineNum"> 122 </span> :
<span class="lineNum"> 123 </span> : pkgProblemResolver(pkgDepCache *Cache);
<span class="lineNum"> 124 </span> : ~pkgProblemResolver();
<span class="lineNum"> 125 </span> : };
<span class="lineNum"> 126 </span> :
<span class="lineNum"> 127 </span> : bool pkgDistUpgrade(pkgDepCache &Cache);
<span class="lineNum"> 128 </span> : bool pkgApplyStatus(pkgDepCache &Cache);
<span class="lineNum"> 129 </span> : bool pkgFixBroken(pkgDepCache &Cache);
<span class="lineNum"> 130 </span> : bool pkgAllUpgrade(pkgDepCache &Cache);
<span class="lineNum"> 131 </span> : bool pkgMinimizeUpgrade(pkgDepCache &Cache);
<span class="lineNum"> 132 </span> :
<span class="lineNum"> 133 </span> : void pkgPrioSortList(pkgCache &Cache,pkgCache::Version **List);
<span class="lineNum"> 134 </span> :
<span class="lineNum"> 135 </span> : bool ListUpdate(pkgAcquireStatus &progress, pkgSourceList &List, int PulseInterval=0);
<span class="lineNum"> 136 </span> :
<span class="lineNum"> 137 </span> : #endif
</pre>
</td>
</tr>
</table>
<br>
<table width="100%" border=0 cellspacing=0 cellpadding=0>
<tr><td class="ruler"><img src="../../../glass.png" width=3 height=3 alt=""></td></tr>
<tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LTP GCOV extension version 1.6</a></td></tr>
</table>
<br>
</body>
</html>
|