summaryrefslogtreecommitdiff
path: root/portato/backend/portage/system.py
diff options
context:
space:
mode:
Diffstat (limited to 'portato/backend/portage/system.py')
-rw-r--r--portato/backend/portage/system.py32
1 files changed, 27 insertions, 5 deletions
diff --git a/portato/backend/portage/system.py b/portato/backend/portage/system.py
index d7c7806..3aaa060 100644
--- a/portato/backend/portage/system.py
+++ b/portato/backend/portage/system.py
@@ -3,7 +3,7 @@
# File: portato/backend/portage/system.py
# This file is part of the Portato-Project, a graphical portage-frontend.
#
-# Copyright (C) 2006-2009 René 'Necoro' Neumann
+# Copyright (C) 2006-2010 René 'Necoro' Neumann
# This is free software. You may redistribute copies of it under the terms of
# the GNU General Public License version 2.
# There is NO WARRANTY, to the extent permitted by law.
@@ -68,7 +68,12 @@ class PortageSystem (SystemInterface):
return PortagePackage(cpv)
def get_config_path (self):
- return portage.USER_CONFIG_PATH
+ path = portage.USER_CONFIG_PATH
+
+ if path[0] != "/":
+ return os.path.join(self.settings.settings["ROOT"], path)
+ else:
+ return path
def get_merge_command (self):
return ["/usr/bin/python", "/usr/bin/emerge"]
@@ -120,6 +125,20 @@ class PortageSystem (SystemInterface):
else:
return True
+ def compare_versions(self, v1, v2):
+ v1 = self.split_cpv(v1)
+ v2 = self.split_cpv(v2)
+
+ # if category is different
+ if v1[0] != v2[0]:
+ return cmp(v1[0],v2[0])
+ # if name is different
+ elif v1[1] != v2[1]:
+ return cmp(v1[1],v2[1])
+ # Compare versions
+ else:
+ return portage.pkgcmp(v1[1:],v2[1:])
+
def with_bdeps(self):
"""Returns whether the "--with-bdeps" option is set to true.
@@ -218,8 +237,11 @@ class PortageSystem (SystemInterface):
cpv = portage.dep_getcpv(cpv)
return portage.catpkgsplit(cpv)
- def sort_package_list(self, pkglist):
- pkglist.sort(PortagePackage.compare_version) # XXX: waaah ... direct package naming... =/
+ def sort_package_list(self, pkglist, only_cpv = False):
+ if only_cpv:
+ pkglist.sort(self.compare_versions)
+ else:
+ pkglist.sort()
return pkglist
def reload_settings (self):
@@ -240,7 +262,7 @@ class PortageSystem (SystemInterface):
if not best:
return
- if not best.is_installed() and (best.is_masked() or best.is_testing(True)): # check to not update unnecessairily
+ if not best.is_installed() and (best.is_masked() or best.is_testing(True)): # check to not update unnecessarily
for i in inst:
if i.matches(crit):
debug("The installed %s matches %s. Discarding upgrade to masked version %s.", i.get_cpv(), crit, best.get_version())