summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2011-08-31 19:52:58 -0700
committerZac Medico <zmedico@gentoo.org>2011-08-31 19:52:58 -0700
commitce501b36d7078db059c606d3b4f38637ad09528e (patch)
tree6b60a4a21d020516d6158bbb580ff219e4e0a2f6 /pym
parent6b8855016820fb84bac25720d99bf8e42c9e9469 (diff)
downloadportage-ce501b36d7078db059c606d3b4f38637ad09528e.tar.gz
portage-ce501b36d7078db059c606d3b4f38637ad09528e.tar.bz2
portage-ce501b36d7078db059c606d3b4f38637ad09528e.zip
xml/metadata: implement XMLParser.doctype()
Avoid deprecation warnings again, like in commit 63035acd702ab0cdaac31e33676b5a20a91eae47.
Diffstat (limited to 'pym')
-rw-r--r--pym/portage/dbapi/vartree.py9
-rw-r--r--pym/portage/package/ebuild/doebuild.py4
-rw-r--r--pym/portage/tests/emerge/test_simple.py45
-rw-r--r--pym/portage/tests/resolver/ResolverPlayground.py3
-rw-r--r--pym/portage/xml/metadata.py15
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