Werner's Miscellanea
Sign in or create your account | Project List | Help
Werner's Miscellanea Commit Details
Date: | 2010-11-22 10:52:53 (13 years 4 months ago) |
---|---|
Author: | Werner Almesberger |
Commit: | b89bcdfd93a60417649340a18ca3bb573b1d9691 |
Message: | qpkg: also consider conflicts introduced by package about to be added - prereq.c (conflicts, resolve, prereq): renamed "conflicts" to "old_conflicts" - prereq.c (new_conflicts, resolve, prereq): also test whether any of the conflicts of the package we're about to add matches an installed or considered package - test/conflict, test/instconf: test for conflicts introduced by package about to be added |
Files: |
qpkg/prereq.c (4 diffs) qpkg/test/conflict (1 diff) qpkg/test/instconf (1 diff) |
Change Details
qpkg/prereq.c | ||
---|---|---|
111 | 111 | } |
112 | 112 | |
113 | 113 | |
114 | static int conflicts(const struct pkg *pkg, const struct list *conf) | |
114 | static int old_conflicts(const struct pkg *pkg, const struct list *conf) | |
115 | 115 | { |
116 | 116 | const struct ref *ref; |
117 | 117 | |
... | ... | |
125 | 125 | } |
126 | 126 | |
127 | 127 | |
128 | static int new_conflicts(const struct ref *refs) | |
129 | { | |
130 | const struct ref *ref; | |
131 | const struct pkg *pkg; | |
132 | ||
133 | for (ref = refs; ref; ref = ref->next) | |
134 | for (pkg = ref->pkg->jrb->val; pkg; pkg = pkg->more) | |
135 | if ((pkg->flags & (QPKG_INSTALLED | QPKG_ADDING)) || | |
136 | pkg->mark) | |
137 | if (satisfies(pkg, ref)) | |
138 | return 1; | |
139 | return 0; | |
140 | } | |
141 | ||
142 | ||
128 | 143 | /* ----- Recurse through lists and layers of dependencies ------------------ */ |
129 | 144 | |
130 | 145 | |
... | ... | |
186 | 201 | exit(1); |
187 | 202 | } |
188 | 203 | if ((pkg->flags & QPKG_INSTALLED) || pkg->mark) { |
189 | assert(!conflicts(pkg, conf)); | |
204 | assert(!old_conflicts(pkg, conf)); | |
190 | 205 | resolve(next_dep, dep->next, top, conf); |
191 | 206 | continue; |
192 | 207 | } |
193 | if (conflicts(pkg, conf)) | |
208 | if (old_conflicts(pkg, conf)) | |
209 | continue; | |
210 | if (new_conflicts(pkg->conflicts)) | |
194 | 211 | continue; |
195 | 212 | level++; |
196 | 213 | append_install(pkg); |
... | ... | |
268 | 285 | .next = installed_conflicts() |
269 | 286 | }; |
270 | 287 | |
271 | if (conflicts(pkg, &conf)) { | |
288 | if (old_conflicts(pkg, &conf) || new_conflicts(pkg->conflicts)) { | |
272 | 289 | fprintf(stderr, "%.*s conflicts with installed packages\n", |
273 | 290 | ID2PF(pkg->id)); |
274 | 291 | exit(1); |
qpkg/test/conflict | ||
---|---|---|
155 | 155 | expect <<EOF |
156 | 156 | bar_0 |
157 | 157 | EOF |
158 | ||
159 | ############################################################################### | |
160 | ||
161 | qpkg_fail "prerequisite conflicts with dependant" prereq A <<EOF | |
162 | Package: B | |
163 | Version: 0 | |
164 | Architecture: test | |
165 | Conflicts: A | |
166 | Filename: B | |
167 | ||
168 | Package: A | |
169 | Version: 0 | |
170 | Architecture: test | |
171 | Depends: B | |
172 | Filename: A | |
173 | EOF | |
174 | expect <<EOF | |
175 | can't resolve A | |
176 | EOF | |
177 | ||
178 | ############################################################################### | |
179 | ||
180 | qpkg_fail "prerequisite conflicts with considered package (1)" prereq A <<EOF | |
181 | Package: B | |
182 | Version: 0 | |
183 | Architecture: test | |
184 | Conflicts: C | |
185 | Filename: B | |
186 | ||
187 | Package: C | |
188 | Version: 0 | |
189 | Architecture: test | |
190 | Filename: C | |
191 | ||
192 | Package: A | |
193 | Version: 0 | |
194 | Architecture: test | |
195 | Depends: B, C | |
196 | Filename: A | |
197 | EOF | |
198 | expect <<EOF | |
199 | can't resolve A | |
200 | EOF | |
201 | ||
202 | ############################################################################### | |
203 | ||
204 | qpkg_fail "prerequisite conflicts with considered package (1)" prereq A <<EOF | |
205 | Package: B | |
206 | Version: 0 | |
207 | Architecture: test | |
208 | Filename: B | |
209 | ||
210 | Package: C | |
211 | Version: 0 | |
212 | Architecture: test | |
213 | Conflicts: B | |
214 | Filename: C | |
215 | ||
216 | Package: A | |
217 | Version: 0 | |
218 | Architecture: test | |
219 | Depends: B, C | |
220 | Filename: A | |
221 | EOF | |
222 | expect <<EOF | |
223 | can't resolve A | |
224 | EOF |
qpkg/test/instconf | ||
---|---|---|
48 | 48 | expect <<EOF |
49 | 49 | A conflicts with installed packages |
50 | 50 | EOF |
51 | ||
52 | ############################################################################### | |
53 | ||
54 | qpkg_fail "prerequisite conflicts with installed package" prereq A <<EOF | |
55 | Package: B | |
56 | Version: 0 | |
57 | Architecture: test | |
58 | Conflicts: C | |
59 | Filename: B | |
60 | ||
61 | Package: A | |
62 | Version: 0 | |
63 | Architecture: test | |
64 | Depends: B | |
65 | Filename: A | |
66 | ||
67 | Package: C | |
68 | Version: 0 | |
69 | Architecture: test | |
70 | Status: installed | |
71 | EOF | |
72 | expect <<EOF | |
73 | can't resolve A | |
74 | EOF | |
75 | ||
76 | ############################################################################### | |
77 | ||
78 | qpkg_fail "initial package conflicts with installed package" prereq A <<EOF | |
79 | Package: A | |
80 | Version: 0 | |
81 | Architecture: test | |
82 | Conflicts: C | |
83 | Filename: A | |
84 | ||
85 | Package: C | |
86 | Version: 0 | |
87 | Architecture: test | |
88 | Status: installed | |
89 | EOF | |
90 | expect <<EOF | |
91 | A conflicts with installed packages |
Branches:
master