From b1fa05115acb2d860116c0a0d486ede15ac2a0f7 Mon Sep 17 00:00:00 2001 From: Fabian Groffen Date: Mon, 24 Aug 2009 09:42:25 +0000 Subject: [PATCH] Merged from trunk -r14127:14130 | 14128 | Make Scheduler._choose_pkg() prefer uninstall operations | | zmedico | when available. | | 14129 | In Scheduler._schedule_tasks_imp(), add uninstall operations | | zmedico | to the front of the merge queue. | | 14130 | Bug #282306 - Inside dblink._find_libs_to_preserve(), fall | | zmedico | back to utf_8 encoding if a path cannot be encoded under the | | | user's chosen encoding. This fixes the traceback shown in | | | bug 282115, comment #6. | svn path=/main/branches/prefix/; revision=14145 --- pym/_emerge/Scheduler.py | 18 ++++++++++++++---- pym/portage/dbapi/vartree.py | 17 +++++++++++++++++ 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/pym/_emerge/Scheduler.py b/pym/_emerge/Scheduler.py index cbb52448a..bb2ed19d2 100644 --- a/pym/_emerge/Scheduler.py +++ b/pym/_emerge/Scheduler.py @@ -1164,13 +1164,23 @@ class Scheduler(PollScheduler): self._prune_digraph() chosen_pkg = None - later = set(self._pkg_queue) + + # Prefer uninstall operations when available. + graph = self._digraph for pkg in self._pkg_queue: - later.remove(pkg) - if not self._dependent_on_scheduled_merges(pkg, later): + if pkg.operation == 'uninstall' and \ + not graph.child_nodes(pkg): chosen_pkg = pkg break + if chosen_pkg is None: + later = set(self._pkg_queue) + for pkg in self._pkg_queue: + later.remove(pkg) + if not self._dependent_on_scheduled_merges(pkg, later): + chosen_pkg = pkg + break + if chosen_pkg is not None: self._pkg_queue.remove(chosen_pkg) @@ -1350,7 +1360,7 @@ class Scheduler(PollScheduler): if pkg.installed: merge = PackageMerge(merge=task) merge.addExitListener(self._merge_exit) - self._task_queues.merge.add(merge) + self._task_queues.merge.addFront(merge) elif pkg.built: self._jobs += 1 diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index 31f42b857..a11cb39d2 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -3424,6 +3424,23 @@ class dblink(object): provider_nodes = set() # Create provider nodes and add them to the graph. for f_abs in old_contents: + + if os is _os_merge: + try: + _unicode_encode(f_abs, + encoding=_encodings['merge'], errors='strict') + except UnicodeEncodeError: + # The package appears to have been merged with a + # different value of sys.getfilesystemencoding(), + # so fall back to utf_8 if appropriate. + try: + _unicode_encode(f_abs, + encoding=_encodings['fs'], errors='strict') + except UnicodeEncodeError: + pass + else: + os = portage.os + f = f_abs[root_len:] if self.isowner(f, root): continue -- 2.26.2