From 497b10604ea665e0efc9891bfea0f3bc38902505 Mon Sep 17 00:00:00 2001 From: Fabian Groffen Date: Sun, 11 Jan 2009 14:31:40 +0000 Subject: [PATCH] Merged from trunk -r12420:12422 | 12421 | When displaying parents of unsolved blockers, prefer parents | | zmedico | that are not directly involved in a conflict. | | 12422 | If necessary, use /proc/loadavg to emulate os.getloadavg(). | | zmedico | | svn path=/main/branches/prefix/; revision=12425 --- pym/_emerge/__init__.py | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py index 7c235b3a6..22504237a 100644 --- a/pym/_emerge/__init__.py +++ b/pym/_emerge/__init__.py @@ -7295,12 +7295,12 @@ class depgraph(object): pruned_list = set() - # Prefer conflict packages over others. + # Prefer packages that are not directly involved in a conflict. for parent_atom in parent_atoms: if len(pruned_list) >= max_parents: break parent, atom = parent_atom - if parent in conflict_pkgs: + if parent not in conflict_pkgs: pruned_list.add(parent_atom) for parent_atom in parent_atoms: @@ -8992,6 +8992,29 @@ def create_poll_instance(): return select.poll() return PollSelectAdapter() +getloadavg = getattr(os, "getloadavg", None) +if getloadavg is None: + def getloadavg(): + """ + Uses /proc/loadavg to emulate os.getloadavg(). + Raises OSError if the load average was unobtainable. + """ + try: + loadavg_str = open('/proc/loadavg').readline() + except IOError: + # getloadavg() is only supposed to raise OSError, so convert + raise OSError('unknown') + loadavg_split = loadavg_str.split() + if len(loadavg_split) < 3: + raise OSError('unknown') + loadavg_floats = [] + for i in xrange(3): + try: + loadavg_floats.append(float(loadavg_split[i])) + except ValueError: + raise OSError('unknown') + return tuple(loadavg_floats) + class PollScheduler(object): class _sched_iface_class(SlotObject): @@ -9039,11 +9062,8 @@ class PollScheduler(object): (max_jobs is True or max_jobs > 1) and \ self._running_job_count() >= 1: try: - avg1, avg5, avg15 = os.getloadavg() - except OSError, e: - writemsg("!!! getloadavg() failed: %s\n" % (e,), - noiselevel=-1) - del e + avg1, avg5, avg15 = getloadavg() + except OSError: return False if avg1 >= max_load: @@ -9424,9 +9444,9 @@ class JobStatusDisplay(object): def _load_avg_str(self): try: - avg = os.getloadavg() - except OSError, e: - return str(e) + avg = getloadavg() + except OSError: + return 'unknown' max_avg = max(avg) -- 2.26.2