diff options
Diffstat (limited to 'pym')
-rw-r--r-- | pym/portage/dbapi/vartree.py | 9 | ||||
-rw-r--r-- | pym/portage/package/ebuild/doebuild.py | 4 | ||||
-rw-r--r-- | pym/portage/tests/emerge/test_simple.py | 45 | ||||
-rw-r--r-- | pym/portage/tests/resolver/ResolverPlayground.py | 3 | ||||
-rw-r--r-- | pym/portage/xml/metadata.py | 15 |
5 files changed, 65 insertions, 11 deletions
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index 1a38d421a..0c0ed6a64 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -1980,10 +1980,11 @@ class dblink(object): unmerge_desc["!mtime"] = _("!mtime") unmerge_desc["!obj"] = _("!obj") unmerge_desc["!sym"] = _("!sym") + unmerge_desc["!prefix"] = _("!prefix") real_root = self.settings['ROOT'] real_root_len = len(real_root) - 1 - eroot_split_len = len(self.settings["EROOT"].split(os.sep)) - 1 + eroot = self.settings["EROOT"] # These files are generated by emerge, so we need to remove # them when they are the only thing left in a directory. @@ -2023,6 +2024,12 @@ class dblink(object): file_data = pkgfiles[objkey] file_type = file_data[0] + + # don't try to unmerge the prefix offset itself + if len(obj) <= len(eroot) or not obj.startswith(eroot): + show_unmerge("---", unmerge_desc["!prefix"], file_type, obj) + continue + statobj = None try: statobj = os.stat(obj) diff --git a/pym/portage/package/ebuild/doebuild.py b/pym/portage/package/ebuild/doebuild.py index 45b28631c..7b3561e77 100644 --- a/pym/portage/package/ebuild/doebuild.py +++ b/pym/portage/package/ebuild/doebuild.py @@ -268,7 +268,9 @@ def doebuild_environment(myebuild, mydo, myroot=None, settings=None, mysettings["T"] = os.path.join(mysettings["PORTAGE_BUILDDIR"], "temp") # Prefix forward compatability - mysettings["ED"] = mysettings["D"] + eprefix_lstrip = mysettings["EPREFIX"].lstrip(os.sep) + mysettings["ED"] = os.path.join( + mysettings["D"], eprefix_lstrip).rstrip(os.sep) + os.sep mysettings["PORTAGE_BASHRC"] = os.path.join( mysettings["PORTAGE_CONFIGROOT"], EBUILD_SH_ENV_FILE) diff --git a/pym/portage/tests/emerge/test_simple.py b/pym/portage/tests/emerge/test_simple.py index f6f5ab06e..771522134 100644 --- a/pym/portage/tests/emerge/test_simple.py +++ b/pym/portage/tests/emerge/test_simple.py @@ -17,12 +17,23 @@ class SimpleEmergeTestCase(TestCase): def testSimple(self): + install_something = """ +S="${WORKDIR}" +src_install() { + einfo "installing something..." + insinto /usr/lib/${P} + echo "blah blah blah" > "${T}"/regular-file + doins "${T}"/regular-file +} +""" + ebuilds = { "dev-libs/A-1": { "EAPI" : "4", "IUSE" : "+flag", "KEYWORDS": "x86", "LICENSE": "GPL-2", + "MISC_CONTENT": install_something, "RDEPEND": "flag? ( dev-libs/B[flag] )", }, "dev-libs/B-1": { @@ -30,6 +41,7 @@ class SimpleEmergeTestCase(TestCase): "IUSE" : "+flag", "KEYWORDS": "x86", "LICENSE": "GPL-2", + "MISC_CONTENT": install_something, }, } @@ -49,6 +61,21 @@ class SimpleEmergeTestCase(TestCase): "LICENSE": "GPL-2", "USE": "flag", }, + "dev-libs/depclean-me-1": { + "EAPI" : "4", + "IUSE" : "", + "KEYWORDS": "x86", + "LICENSE": "GPL-2", + "USE": "", + }, + "app-misc/depclean-me-1": { + "EAPI" : "4", + "IUSE" : "", + "KEYWORDS": "x86", + "LICENSE": "GPL-2", + "RDEPEND": "dev-libs/depclean-me", + "USE": "", + }, } test_args = ( @@ -58,6 +85,7 @@ class SimpleEmergeTestCase(TestCase): ("--pretend", "dev-libs/A"), ("--pretend", "--tree", "--complete-graph", "dev-libs/A"), ("-p", "dev-libs/B"), + ("--oneshot", "dev-libs/B",), ("--oneshot", "dev-libs/A",), ("--noreplace", "dev-libs/A",), ("--pretend", "--depclean", "--verbose", "dev-libs/B"), @@ -106,6 +134,8 @@ class SimpleEmergeTestCase(TestCase): "INFOPATH" : "", "PATH" : path, "PORTAGE_GRPNAME" : os.environ["PORTAGE_GRPNAME"], + "PORTAGE_INST_GID" : str(portage.data.portage_gid), + "PORTAGE_INST_UID" : str(portage.data.portage_uid), "PORTAGE_TMPDIR" : portage_tmpdir, "PORTAGE_USERNAME" : os.environ["PORTAGE_USERNAME"], "PORTDIR" : portdir, @@ -130,15 +160,16 @@ class SimpleEmergeTestCase(TestCase): for args in test_args: proc = subprocess.Popen([portage._python_interpreter, "-Wd", os.path.join(PORTAGE_BIN_PATH, "emerge")] + list(args), - env=env, stdout=subprocess.PIPE) - output = proc.stdout.readlines() + env=env) + #output = proc.stdout.readlines() proc.wait() - proc.stdout.close() - if proc.returncode != os.EX_OK: - for line in output: - sys.stderr.write(_unicode_decode(line)) + #proc.stdout.close() + #if proc.returncode != os.EX_OK: + # for line in output: + # sys.stderr.write(_unicode_decode(line)) self.assertEqual(os.EX_OK, proc.returncode, "emerge failed with args %s" % (args,)) finally: - playground.cleanup() + pass + ##playground.cleanup() diff --git a/pym/portage/tests/resolver/ResolverPlayground.py b/pym/portage/tests/resolver/ResolverPlayground.py index f41126bb7..28567b3d7 100644 --- a/pym/portage/tests/resolver/ResolverPlayground.py +++ b/pym/portage/tests/resolver/ResolverPlayground.py @@ -120,6 +120,7 @@ class ResolverPlayground(object): rdepend = metadata.pop("RDEPEND", None) pdepend = metadata.pop("PDEPEND", None) required_use = metadata.pop("REQUIRED_USE", None) + misc_content = metadata.pop("MISC_CONTENT", None) if metadata: raise ValueError("metadata of ebuild '%s' contains unknown keys: %s" % (cpv, metadata.keys())) @@ -152,6 +153,8 @@ class ResolverPlayground(object): f.write('PDEPEND="' + str(pdepend) + '"\n') if required_use is not None: f.write('REQUIRED_USE="' + str(required_use) + '"\n') + if misc_content is not None: + f.write(misc_content) f.close() def _create_ebuild_manifests(self, ebuilds): diff --git a/pym/portage/xml/metadata.py b/pym/portage/xml/metadata.py index ef335e29f..9e1886927 100644 --- a/pym/portage/xml/metadata.py +++ b/pym/portage/xml/metadata.py @@ -36,10 +36,19 @@ except ImportError: import xml.etree.ElementTree as etree import re +import xml.etree.ElementTree import portage from portage import os from portage.util import unique_everseen +class _MetadataTreeBuilder(xml.etree.ElementTree.TreeBuilder): + """ + Implements doctype() as required to avoid deprecation warnings with + Python >=2.7. + """ + def doctype(self, name, pubid, system): + pass + class _Maintainer(object): """An object for representing one maintainer. @@ -173,7 +182,8 @@ class MetaDataXML(object): self._xml_tree = None try: - self._xml_tree = etree.parse(metadata_xml_path) + self._xml_tree = etree.parse(metadata_xml_path, + parser=etree.XMLParser(target=_MetadataTreeBuilder())) except ImportError: pass @@ -208,7 +218,8 @@ class MetaDataXML(object): if self._herdstree is None: try: - self._herdstree = etree.parse(self._herds_path) + self._herdstree = etree.parse(self._herds_path, + parser=etree.XMLParser(target=_MetadataTreeBuilder())) except (ImportError, IOError, SyntaxError): return None |