1 |
Author: zmedico |
2 |
Date: 2008-05-03 01:42:25 +0000 (Sat, 03 May 2008) |
3 |
New Revision: 10114 |
4 |
|
5 |
Modified: |
6 |
main/trunk/pym/_emerge/__init__.py |
7 |
Log: |
8 |
* Check for masked packages in the --resume merge list and bail |
9 |
out in that case (bug #199408). |
10 |
|
11 |
* In depgraph.loadResumeCommand(), create a dependency graph from |
12 |
the resume list. This ensures that the merge list has it's |
13 |
dependencies satisfied. It also enables --tree display together |
14 |
with --resume. |
15 |
|
16 |
|
17 |
Modified: main/trunk/pym/_emerge/__init__.py |
18 |
=================================================================== |
19 |
--- main/trunk/pym/_emerge/__init__.py 2008-05-02 22:33:31 UTC (rev 10113) |
20 |
+++ main/trunk/pym/_emerge/__init__.py 2008-05-03 01:42:25 UTC (rev 10114) |
21 |
@@ -4724,6 +4724,9 @@ |
22 |
""" |
23 |
self._sets["args"].update(resume_data.get("favorites", [])) |
24 |
mergelist = resume_data.get("mergelist", []) |
25 |
+ favorites = resume_data.get("favorites") |
26 |
+ if not isinstance(favorites, list): |
27 |
+ favorites = [] |
28 |
|
29 |
if mergelist and "--skipfirst" in self.myopts: |
30 |
for i, task in enumerate(mergelist): |
31 |
@@ -4763,11 +4766,51 @@ |
32 |
operation=action, root=myroot, |
33 |
type_name=pkg_type) |
34 |
self._pkg_cache[pkg] = pkg |
35 |
+ |
36 |
+ root_config = self.roots[pkg.root] |
37 |
+ if "merge" == pkg.operation and \ |
38 |
+ not visible(root_config.settings, pkg): |
39 |
+ self._unsatisfied_deps_for_display.append( |
40 |
+ ((pkg.root, "="+pkg.cpv), {"myparent":None})) |
41 |
+ |
42 |
fakedb[myroot].cpv_inject(pkg) |
43 |
serialized_tasks.append(pkg) |
44 |
self.spinner.update() |
45 |
- self._serialized_tasks_cache = serialized_tasks |
46 |
|
47 |
+ if self._unsatisfied_deps_for_display: |
48 |
+ return False |
49 |
+ |
50 |
+ if not serialized_tasks or "--nodeps" in self.myopts: |
51 |
+ self._serialized_tasks_cache = serialized_tasks |
52 |
+ else: |
53 |
+ favorites_set = InternalPackageSet(atom for atom in favorites \ |
54 |
+ if isinstance(atom, basestring) and portage.isvalidatom(atom)) |
55 |
+ for node in serialized_tasks: |
56 |
+ if isinstance(node, Package) and \ |
57 |
+ node.operation == "merge" and \ |
58 |
+ favorites_set.findAtomForPackage(node.cpv, node.metadata): |
59 |
+ self._set_nodes.add(node) |
60 |
+ |
61 |
+ self._select_package = self._select_pkg_from_graph |
62 |
+ for task in serialized_tasks: |
63 |
+ if isinstance(task, Package) and \ |
64 |
+ task.operation == "merge": |
65 |
+ self._add_pkg(task, None) |
66 |
+ if not self._create_graph(): |
67 |
+ return False |
68 |
+ self._serialized_tasks_cache = None |
69 |
+ try: |
70 |
+ self.altlist() |
71 |
+ except self._unknown_internal_error: |
72 |
+ return False |
73 |
+ |
74 |
+ for node in self.digraph.root_nodes(): |
75 |
+ if isinstance(node, Package) and \ |
76 |
+ node.operation == "merge": |
77 |
+ # Give hint to the --tree display. |
78 |
+ self._set_nodes.add(node) |
79 |
+ return True |
80 |
+ |
81 |
class _internal_exception(portage.exception.PortageException): |
82 |
def __init__(self, value=""): |
83 |
portage.exception.PortageException.__init__(self, value) |
84 |
@@ -5157,7 +5200,7 @@ |
85 |
|
86 |
mymergelist = mylist |
87 |
myfeat = self.settings.features[:] |
88 |
- bad_resume_opts = set(["--ask", "--tree", "--changelog", "--skipfirst", |
89 |
+ bad_resume_opts = set(["--ask", "--changelog", "--skipfirst", |
90 |
"--resume"]) |
91 |
if "parallel-fetch" in myfeat and \ |
92 |
not ("--pretend" in self.myopts or \ |
93 |
@@ -7606,8 +7649,9 @@ |
94 |
myparams = create_depgraph_params(myopts, myaction) |
95 |
mydepgraph = depgraph(settings, trees, |
96 |
myopts, myparams, spinner) |
97 |
+ success = False |
98 |
try: |
99 |
- mydepgraph.loadResumeCommand(mtimedb["resume"]) |
100 |
+ success = mydepgraph.loadResumeCommand(mtimedb["resume"]) |
101 |
except portage.exception.PackageNotFound: |
102 |
if show_spinner: |
103 |
print |
104 |
@@ -7617,14 +7661,19 @@ |
105 |
out.eerror(" available to be emerged. Please restart/continue") |
106 |
out.eerror(" the merge operation manually.") |
107 |
|
108 |
+ if show_spinner: |
109 |
+ print "\b\b... done!" |
110 |
+ |
111 |
+ if not success: |
112 |
+ mydepgraph.display_problems() |
113 |
+ |
114 |
# delete the current list and also the backup |
115 |
# since it's probably stale too. |
116 |
for k in ("resume", "resume_backup"): |
117 |
mtimedb.pop(k, None) |
118 |
mtimedb.commit() |
119 |
+ |
120 |
return 1 |
121 |
- if show_spinner: |
122 |
- print "\b\b... done!" |
123 |
else: |
124 |
if ("--resume" in myopts): |
125 |
print darkgreen("emerge: It seems we have nothing to resume...") |
126 |
@@ -7660,7 +7709,9 @@ |
127 |
print colorize("INFORM", "emerge: It seems we have nothing to resume...") |
128 |
return os.EX_OK |
129 |
favorites = mtimedb["resume"]["favorites"] |
130 |
- retval = mydepgraph.display(mymergelist, favorites=favorites) |
131 |
+ retval = mydepgraph.display( |
132 |
+ mydepgraph.altlist(reversed=tree), |
133 |
+ favorites=favorites) |
134 |
if retval != os.EX_OK: |
135 |
return retval |
136 |
prompt="Would you like to resume merging these packages?" |
137 |
@@ -7716,7 +7767,9 @@ |
138 |
print colorize("INFORM", "emerge: It seems we have nothing to resume...") |
139 |
return os.EX_OK |
140 |
favorites = mtimedb["resume"]["favorites"] |
141 |
- retval = mydepgraph.display(mymergelist, favorites=favorites) |
142 |
+ retval = mydepgraph.display( |
143 |
+ mydepgraph.altlist(reversed=tree), |
144 |
+ favorites=favorites) |
145 |
if retval != os.EX_OK: |
146 |
return retval |
147 |
else: |
148 |
@@ -8297,11 +8350,6 @@ |
149 |
import portage.debug |
150 |
portage.debug.set_trace(True) |
151 |
|
152 |
- if ("--resume" in myopts): |
153 |
- if "--tree" in myopts: |
154 |
- print "* --tree is currently broken with --resume. Disabling..." |
155 |
- del myopts["--tree"] |
156 |
- |
157 |
if not ("--quiet" in myopts): |
158 |
if not sys.stdout.isatty() or ("--nospinner" in myopts): |
159 |
spinner.update = spinner.update_basic |
160 |
|
161 |
-- |
162 |
gentoo-commits@l.g.o mailing list |