1 |
Author: zmedico |
2 |
Date: 2008-12-25 01:12:33 +0000 (Thu, 25 Dec 2008) |
3 |
New Revision: 12309 |
4 |
|
5 |
Modified: |
6 |
main/branches/2.1.6/pym/_emerge/__init__.py |
7 |
Log: |
8 |
Bug #252167 - If the ebuild no longer exists or it's keywords have been dropped, |
9 |
reject built instances (installed or binary). If --usepkgonly is enabled, assume |
10 |
that the ebuild status should be ignored. (trunk r12278) |
11 |
|
12 |
Modified: main/branches/2.1.6/pym/_emerge/__init__.py |
13 |
=================================================================== |
14 |
--- main/branches/2.1.6/pym/_emerge/__init__.py 2008-12-25 01:12:14 UTC (rev 12308) |
15 |
+++ main/branches/2.1.6/pym/_emerge/__init__.py 2008-12-25 01:12:33 UTC (rev 12309) |
16 |
@@ -5813,7 +5813,7 @@ |
17 |
calculated_use = True |
18 |
self._pkg_cache[pkg] = pkg |
19 |
|
20 |
- if not installed or (installed and matched_packages): |
21 |
+ if not installed or (built and matched_packages): |
22 |
# Only enforce visibility on installed packages |
23 |
# if there is at least one other visible package |
24 |
# available. By filtering installed masked packages |
25 |
@@ -5832,9 +5832,8 @@ |
26 |
# version is masked by KEYWORDS, but never |
27 |
# reinstall the same exact version only due |
28 |
# to a KEYWORDS mask. |
29 |
- if installed and matched_packages and \ |
30 |
- pkgsettings._getMissingKeywords( |
31 |
- pkg.cpv, pkg.metadata): |
32 |
+ if built and matched_packages: |
33 |
+ |
34 |
different_version = None |
35 |
for avail_pkg in matched_packages: |
36 |
if not portage.dep.cpvequal( |
37 |
@@ -5842,10 +5841,27 @@ |
38 |
different_version = avail_pkg |
39 |
break |
40 |
if different_version is not None: |
41 |
- # Only reinstall for KEYWORDS if |
42 |
- # it's not the same version. |
43 |
- continue |
44 |
|
45 |
+ if installed and \ |
46 |
+ pkgsettings._getMissingKeywords( |
47 |
+ pkg.cpv, pkg.metadata): |
48 |
+ continue |
49 |
+ |
50 |
+ # If the ebuild no longer exists or it's |
51 |
+ # keywords have been dropped, reject built |
52 |
+ # instances (installed or binary). |
53 |
+ # If --usepkgonly is enabled, assume that |
54 |
+ # the ebuild status should be ignored. |
55 |
+ if not usepkgonly: |
56 |
+ try: |
57 |
+ pkg_eb = self._pkg( |
58 |
+ pkg.cpv, "ebuild", root_config) |
59 |
+ except portage.exception.PackageNotFound: |
60 |
+ continue |
61 |
+ else: |
62 |
+ if not visible(pkgsettings, pkg_eb): |
63 |
+ continue |
64 |
+ |
65 |
if not pkg.built and not calculated_use: |
66 |
# This is avoided whenever possible because |
67 |
# it's expensive. |
68 |
@@ -6133,7 +6149,10 @@ |
69 |
db = root_config.trees[tree_type].dbapi |
70 |
db_keys = list(self._trees_orig[root_config.root][ |
71 |
tree_type].dbapi._aux_cache_keys) |
72 |
- metadata = izip(db_keys, db.aux_get(cpv, db_keys)) |
73 |
+ try: |
74 |
+ metadata = izip(db_keys, db.aux_get(cpv, db_keys)) |
75 |
+ except KeyError: |
76 |
+ raise portage.exception.PackageNotFound(cpv) |
77 |
pkg = Package(cpv=cpv, metadata=metadata, |
78 |
root_config=root_config, installed=installed) |
79 |
if type_name == "ebuild": |