1 |
Author: grobian |
2 |
Date: 2009-08-24 09:42:25 +0000 (Mon, 24 Aug 2009) |
3 |
New Revision: 14145 |
4 |
|
5 |
Modified: |
6 |
main/branches/prefix/pym/_emerge/Scheduler.py |
7 |
main/branches/prefix/pym/portage/dbapi/vartree.py |
8 |
Log: |
9 |
Merged from trunk -r14127:14130 |
10 |
|
11 |
| 14128 | Make Scheduler._choose_pkg() prefer uninstall operations | |
12 |
| zmedico | when available. | |
13 |
|
14 |
| 14129 | In Scheduler._schedule_tasks_imp(), add uninstall operations | |
15 |
| zmedico | to the front of the merge queue. | |
16 |
|
17 |
| 14130 | Bug #282306 - Inside dblink._find_libs_to_preserve(), fall | |
18 |
| zmedico | back to utf_8 encoding if a path cannot be encoded under the | |
19 |
| | user's chosen encoding. This fixes the traceback shown in | |
20 |
| | bug 282115, comment #6. | |
21 |
|
22 |
|
23 |
Modified: main/branches/prefix/pym/_emerge/Scheduler.py |
24 |
=================================================================== |
25 |
--- main/branches/prefix/pym/_emerge/Scheduler.py 2009-08-24 09:40:49 UTC (rev 14144) |
26 |
+++ main/branches/prefix/pym/_emerge/Scheduler.py 2009-08-24 09:42:25 UTC (rev 14145) |
27 |
@@ -1164,13 +1164,23 @@ |
28 |
self._prune_digraph() |
29 |
|
30 |
chosen_pkg = None |
31 |
- later = set(self._pkg_queue) |
32 |
+ |
33 |
+ # Prefer uninstall operations when available. |
34 |
+ graph = self._digraph |
35 |
for pkg in self._pkg_queue: |
36 |
- later.remove(pkg) |
37 |
- if not self._dependent_on_scheduled_merges(pkg, later): |
38 |
+ if pkg.operation == 'uninstall' and \ |
39 |
+ not graph.child_nodes(pkg): |
40 |
chosen_pkg = pkg |
41 |
break |
42 |
|
43 |
+ if chosen_pkg is None: |
44 |
+ later = set(self._pkg_queue) |
45 |
+ for pkg in self._pkg_queue: |
46 |
+ later.remove(pkg) |
47 |
+ if not self._dependent_on_scheduled_merges(pkg, later): |
48 |
+ chosen_pkg = pkg |
49 |
+ break |
50 |
+ |
51 |
if chosen_pkg is not None: |
52 |
self._pkg_queue.remove(chosen_pkg) |
53 |
|
54 |
@@ -1350,7 +1360,7 @@ |
55 |
if pkg.installed: |
56 |
merge = PackageMerge(merge=task) |
57 |
merge.addExitListener(self._merge_exit) |
58 |
- self._task_queues.merge.add(merge) |
59 |
+ self._task_queues.merge.addFront(merge) |
60 |
|
61 |
elif pkg.built: |
62 |
self._jobs += 1 |
63 |
|
64 |
Modified: main/branches/prefix/pym/portage/dbapi/vartree.py |
65 |
=================================================================== |
66 |
--- main/branches/prefix/pym/portage/dbapi/vartree.py 2009-08-24 09:40:49 UTC (rev 14144) |
67 |
+++ main/branches/prefix/pym/portage/dbapi/vartree.py 2009-08-24 09:42:25 UTC (rev 14145) |
68 |
@@ -3424,6 +3424,23 @@ |
69 |
provider_nodes = set() |
70 |
# Create provider nodes and add them to the graph. |
71 |
for f_abs in old_contents: |
72 |
+ |
73 |
+ if os is _os_merge: |
74 |
+ try: |
75 |
+ _unicode_encode(f_abs, |
76 |
+ encoding=_encodings['merge'], errors='strict') |
77 |
+ except UnicodeEncodeError: |
78 |
+ # The package appears to have been merged with a |
79 |
+ # different value of sys.getfilesystemencoding(), |
80 |
+ # so fall back to utf_8 if appropriate. |
81 |
+ try: |
82 |
+ _unicode_encode(f_abs, |
83 |
+ encoding=_encodings['fs'], errors='strict') |
84 |
+ except UnicodeEncodeError: |
85 |
+ pass |
86 |
+ else: |
87 |
+ os = portage.os |
88 |
+ |
89 |
f = f_abs[root_len:] |
90 |
if self.isowner(f, root): |
91 |
continue |