Gentoo Archives: gentoo-commits

From: Zac Medico <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:master commit in: bin/ebuild-helpers/, pym/portage/package/ebuild/, pym/portage/dbapi/, ...
Date: Thu, 01 Sep 2011 02:53:28
Message-Id: ce501b36d7078db059c606d3b4f38637ad09528e.zmedico@gentoo
1 commit: ce501b36d7078db059c606d3b4f38637ad09528e
2 Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
3 AuthorDate: Thu Sep 1 02:52:58 2011 +0000
4 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
5 CommitDate: Thu Sep 1 02:52:58 2011 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=ce501b36
7
8 xml/metadata: implement XMLParser.doctype()
9
10 Avoid deprecation warnings again, like in commit
11 63035acd702ab0cdaac31e33676b5a20a91eae47.
12
13 ---
14 bin/ebuild-helpers/doexe | 8 +-
15 bin/ebuild-helpers/doins | 16 ++--
16 bin/ebuild-helpers/dosed | 8 +-
17 bin/ebuild.sh | 88 +++++++++++++---------
18 pym/portage/dbapi/vartree.py | 9 ++-
19 pym/portage/package/ebuild/doebuild.py | 4 +-
20 pym/portage/tests/emerge/test_simple.py | 45 +++++++++--
21 pym/portage/tests/resolver/ResolverPlayground.py | 3 +
22 pym/portage/xml/metadata.py | 15 +++-
23 9 files changed, 136 insertions(+), 60 deletions(-)
24
25 diff --git a/bin/ebuild-helpers/doexe b/bin/ebuild-helpers/doexe
26 index 360800e..f44cfba 100755
27 --- a/bin/ebuild-helpers/doexe
28 +++ b/bin/ebuild-helpers/doexe
29 @@ -9,8 +9,10 @@ if [[ $# -lt 1 ]] ; then
30 exit 1
31 fi
32
33 -if [[ ! -d ${D}${_E_EXEDESTTREE_} ]] ; then
34 - install -d "${D}${_E_EXEDESTTREE_}"
35 +case "$EAPI" in 0|1|2) ED=${D} ;; esac
36 +
37 +if [[ ! -d ${ED}${_E_EXEDESTTREE_} ]] ; then
38 + install -d "${ED}${_E_EXEDESTTREE_}"
39 fi
40
41 TMP=$T/.doexe_tmp
42 @@ -29,7 +31,7 @@ for x in "$@" ; do
43 mysrc="${x}"
44 fi
45 if [ -e "$mysrc" ] ; then
46 - install $EXEOPTIONS "$mysrc" "$D$_E_EXEDESTTREE_"
47 + install $EXEOPTIONS "$mysrc" "$ED$_E_EXEDESTTREE_"
48 else
49 echo "!!! ${0##*/}: $mysrc does not exist" 1>&2
50 false
51
52 diff --git a/bin/ebuild-helpers/doins b/bin/ebuild-helpers/doins
53 index 7dec146..1ca69a6 100755
54 --- a/bin/ebuild-helpers/doins
55 +++ b/bin/ebuild-helpers/doins
56 @@ -27,12 +27,14 @@ else
57 DOINSRECUR=n
58 fi
59
60 -if [[ ${INSDESTTREE#${D}} != "${INSDESTTREE}" ]]; then
61 +case "$EAPI" in 0|1|2) export ED="${D}" ;; esac
62 +
63 +if [[ ${INSDESTTREE#${ED}} != "${INSDESTTREE}" ]]; then
64 vecho "-------------------------------------------------------" 1>&2
65 - vecho "You should not use \${D} with helpers." 1>&2
66 + vecho "You should not use \${ED} with helpers." 1>&2
67 vecho " --> ${INSDESTTREE}" 1>&2
68 vecho "-------------------------------------------------------" 1>&2
69 - helpers_die "${0##*/} used with \${D}"
70 + helpers_die "${0##*/} used with \${ED}"
71 exit 1
72 fi
73
74 @@ -49,7 +51,7 @@ export TMP=$T/.doins_tmp
75 # Use separate directories to avoid potential name collisions.
76 mkdir -p "$TMP"/{1,2}
77
78 -[[ ! -d ${D}${INSDESTTREE} ]] && dodir "${INSDESTTREE}"
79 +[[ ! -d ${ED}${INSDESTTREE} ]] && dodir "${INSDESTTREE}"
80
81 _doins() {
82 local mysrc="$1" mydir="$2" cleanup="" rval
83 @@ -63,8 +65,8 @@ _doins() {
84 # $PORTAGE_ACTUAL_DISTDIR/.
85 if [ $PRESERVE_SYMLINKS = y ] && \
86 ! [[ $(readlink "$mysrc") == "$PORTAGE_ACTUAL_DISTDIR"/* ]] ; then
87 - rm -rf "$D$INSDESTTREE/$mydir/${mysrc##*/}" || return $?
88 - cp -P "$mysrc" "$D$INSDESTTREE/$mydir/${mysrc##*/}"
89 + rm -rf "${ED}$INSDESTTREE/$mydir/${mysrc##*/}" || return $?
90 + cp -P "$mysrc" "${ED}$INSDESTTREE/$mydir/${mysrc##*/}"
91 return $?
92 else
93 cp "$mysrc" "$TMP/2/${mysrc##*/}" || return $?
94 @@ -73,7 +75,7 @@ _doins() {
95 fi
96 fi
97
98 - install ${INSOPTIONS} "${mysrc}" "${D}${INSDESTTREE}/${mydir}"
99 + install ${INSOPTIONS} "${mysrc}" "${ED}${INSDESTTREE}/${mydir}"
100 rval=$?
101 [[ -n ${cleanup} ]] && rm -f "${cleanup}"
102 [ $rval -ne 0 ] && echo "!!! ${0##*/}: $mysrc does not exist" 1>&2
103
104 diff --git a/bin/ebuild-helpers/dosed b/bin/ebuild-helpers/dosed
105 index afc949b..00cf5da 100755
106 --- a/bin/ebuild-helpers/dosed
107 +++ b/bin/ebuild-helpers/dosed
108 @@ -1,5 +1,5 @@
109 #!/bin/bash
110 -# Copyright 1999-2006 Gentoo Foundation
111 +# Copyright 1999-2011 Gentoo Foundation
112 # Distributed under the terms of the GNU General Public License v2
113
114 if [[ $# -lt 1 ]] ; then
115 @@ -7,12 +7,14 @@ if [[ $# -lt 1 ]] ; then
116 exit 1
117 fi
118
119 +case "$EAPI" in 0|1|2) ED=${D} ;; esac
120 +
121 ret=0
122 file_found=0
123 -mysed="s:${D}::g"
124 +mysed="s:${ED}::g"
125
126 for x in "$@" ; do
127 - y=$D${x#/}
128 + y=$ED${x#/}
129 if [ -e "${y}" ] ; then
130 if [ -f "${y}" ] ; then
131 file_found=1
132
133 diff --git a/bin/ebuild.sh b/bin/ebuild.sh
134 index 23a1240..ae03df7 100755
135 --- a/bin/ebuild.sh
136 +++ b/bin/ebuild.sh
137 @@ -325,9 +325,11 @@ declare -a PORTAGE_DOCOMPRESS_SKIP=( /usr/share/doc/${PF}/html )
138 keepdir() {
139 dodir "$@"
140 local x
141 + local ed=${ED}
142 + case "$EAPI" in 0|1|2) ed=${D} ;; esac
143 if [ "$1" == "-R" ] || [ "$1" == "-r" ]; then
144 shift
145 - find "$@" -type d -printf "${D}%p/.keep_${CATEGORY}_${PN}-${SLOT}\n" \
146 + find "$@" -type d -printf "${ed}%p/.keep_${CATEGORY}_${PN}-${SLOT}\n" \
147 | tr "\n" "\0" | \
148 while read -r -d $'\0' ; do
149 >> "$REPLY" || \
150 @@ -335,8 +337,8 @@ keepdir() {
151 done
152 else
153 for x in "$@"; do
154 - >> "${D}${x}/.keep_${CATEGORY}_${PN}-${SLOT}" || \
155 - die "Failed to create .keep in ${D}${x}"
156 + >> "${ed}${x}/.keep_${CATEGORY}_${PN}-${SLOT}" || \
157 + die "Failed to create .keep in ${ed}${x}"
158 done
159 fi
160 }
161 @@ -484,6 +486,8 @@ hasg() {
162 hasgq() { hasg "$@" >/dev/null ; }
163 econf() {
164 local x
165 + local eprefix=${EPREFIX}
166 + case "$EAPI" in 0|1|2) eprefix= ;; esac
167
168 local phase_func=$(_ebuild_arg_to_phase "$EAPI" "$EBUILD_PHASE")
169 if [[ -n $phase_func ]] ; then
170 @@ -505,12 +509,12 @@ econf() {
171 sed -e "1s:^#![[:space:]]*/bin/sh:#!$CONFIG_SHELL:" -i "$ECONF_SOURCE/configure" || \
172 die "Substition of shebang in '$ECONF_SOURCE/configure' failed"
173 fi
174 - if [ -e /usr/share/gnuconfig/ ]; then
175 + if [ -e "${eprefix}"/usr/share/gnuconfig/ ]; then
176 find "${WORKDIR}" -type f '(' \
177 -name config.guess -o -name config.sub ')' -print0 | \
178 while read -r -d $'\0' x ; do
179 - vecho " * econf: updating ${x/${WORKDIR}\/} with /usr/share/gnuconfig/${x##*/}"
180 - cp -f /usr/share/gnuconfig/"${x##*/}" "${x}"
181 + vecho " * econf: updating ${x/${WORKDIR}\/} with ${eprefix}/usr/share/gnuconfig/${x##*/}"
182 + cp -f "${eprefix}"/usr/share/gnuconfig/"${x##*/}" "${x}"
183 done
184 fi
185
186 @@ -530,7 +534,7 @@ econf() {
187 if [[ -n ${CONF_LIBDIR} ]] && ! hasgq --libdir=\* "$@" ; then
188 export CONF_PREFIX=$(hasg --exec-prefix=\* "$@")
189 [[ -z ${CONF_PREFIX} ]] && CONF_PREFIX=$(hasg --prefix=\* "$@")
190 - : ${CONF_PREFIX:=/usr}
191 + : ${CONF_PREFIX:=${eprefix}/usr}
192 CONF_PREFIX=${CONF_PREFIX#*=}
193 [[ ${CONF_PREFIX} != /* ]] && CONF_PREFIX="/${CONF_PREFIX}"
194 [[ ${CONF_LIBDIR} != /* ]] && CONF_LIBDIR="/${CONF_LIBDIR}"
195 @@ -538,15 +542,15 @@ econf() {
196 fi
197
198 set -- \
199 - --prefix=/usr \
200 + --prefix="${eprefix}"/usr \
201 ${CBUILD:+--build=${CBUILD}} \
202 --host=${CHOST} \
203 ${CTARGET:+--target=${CTARGET}} \
204 - --mandir=/usr/share/man \
205 - --infodir=/usr/share/info \
206 - --datadir=/usr/share \
207 - --sysconfdir=/etc \
208 - --localstatedir=/var/lib \
209 + --mandir="${eprefix}"/usr/share/man \
210 + --infodir="${eprefix}"/usr/share/info \
211 + --datadir="${eprefix}"/usr/share \
212 + --sysconfdir="${eprefix}"/etc \
213 + --localstatedir="${eprefix}"/var/lib \
214 "$@" \
215 ${EXTRA_ECONF}
216 vecho "${ECONF_SOURCE}/configure" "$@"
217 @@ -570,6 +574,8 @@ econf() {
218 einstall() {
219 # CONF_PREFIX is only set if they didn't pass in libdir above.
220 local LOCAL_EXTRA_EINSTALL="${EXTRA_EINSTALL}"
221 + local ed=${ED}
222 + case "$EAPI" in 0|1|2) ed=${D} ;; esac
223 LIBDIR_VAR="LIBDIR_${ABI}"
224 if [ -n "${ABI}" -a -n "${!LIBDIR_VAR}" ]; then
225 CONF_LIBDIR="${!LIBDIR_VAR}"
226 @@ -584,22 +590,22 @@ einstall() {
227
228 if [ -f ./[mM]akefile -o -f ./GNUmakefile ] ; then
229 if [ "${PORTAGE_DEBUG}" == "1" ]; then
230 - ${MAKE:-make} -n prefix="${D}usr" \
231 - datadir="${D}usr/share" \
232 - infodir="${D}usr/share/info" \
233 - localstatedir="${D}var/lib" \
234 - mandir="${D}usr/share/man" \
235 - sysconfdir="${D}etc" \
236 + ${MAKE:-make} -n prefix="${ed}usr" \
237 + datadir="${ed}usr/share" \
238 + infodir="${ed}usr/share/info" \
239 + localstatedir="${ed}var/lib" \
240 + mandir="${ed}usr/share/man" \
241 + sysconfdir="${ed}etc" \
242 ${LOCAL_EXTRA_EINSTALL} \
243 ${MAKEOPTS} ${EXTRA_EMAKE} -j1 \
244 "$@" install
245 fi
246 - ${MAKE:-make} prefix="${D}usr" \
247 - datadir="${D}usr/share" \
248 - infodir="${D}usr/share/info" \
249 - localstatedir="${D}var/lib" \
250 - mandir="${D}usr/share/man" \
251 - sysconfdir="${D}etc" \
252 + ${MAKE:-make} prefix="${ed}usr" \
253 + datadir="${ed}usr/share" \
254 + infodir="${ed}usr/share/info" \
255 + localstatedir="${ed}var/lib" \
256 + mandir="${ed}usr/share/man" \
257 + sysconfdir="${ed}etc" \
258 ${LOCAL_EXTRA_EINSTALL} \
259 ${MAKEOPTS} ${EXTRA_EMAKE} -j1 \
260 "$@" install || die "einstall failed"
261 @@ -795,8 +801,10 @@ into() {
262 export DESTTREE=""
263 else
264 export DESTTREE=$1
265 - if [ ! -d "${D}${DESTTREE}" ]; then
266 - install -d "${D}${DESTTREE}"
267 + local ed=${ED}
268 + case "$EAPI" in 0|1|2) ed=${D} ;; esac
269 + if [ ! -d "${ed}${DESTTREE}" ]; then
270 + install -d "${ed}${DESTTREE}"
271 local ret=$?
272 if [[ $ret -ne 0 ]] ; then
273 helpers_die "${FUNCNAME[0]} failed"
274 @@ -811,8 +819,10 @@ insinto() {
275 export INSDESTTREE=""
276 else
277 export INSDESTTREE=$1
278 - if [ ! -d "${D}${INSDESTTREE}" ]; then
279 - install -d "${D}${INSDESTTREE}"
280 + local ed=${ED}
281 + case "$EAPI" in 0|1|2) d=${D} ;; esac
282 + if [ ! -d "${ed}${INSDESTTREE}" ]; then
283 + install -d "${ed}${INSDESTTREE}"
284 local ret=$?
285 if [[ $ret -ne 0 ]] ; then
286 helpers_die "${FUNCNAME[0]} failed"
287 @@ -827,8 +837,10 @@ exeinto() {
288 export _E_EXEDESTTREE_=""
289 else
290 export _E_EXEDESTTREE_="$1"
291 - if [ ! -d "${D}${_E_EXEDESTTREE_}" ]; then
292 - install -d "${D}${_E_EXEDESTTREE_}"
293 + local ed=${ED}
294 + case "$EAPI" in 0|1|2) d=${D} ;; esac
295 + if [ ! -d "${ed}${_E_EXEDESTTREE_}" ]; then
296 + install -d "${ed}${_E_EXEDESTTREE_}"
297 local ret=$?
298 if [[ $ret -ne 0 ]] ; then
299 helpers_die "${FUNCNAME[0]} failed"
300 @@ -843,8 +855,10 @@ docinto() {
301 export _E_DOCDESTTREE_=""
302 else
303 export _E_DOCDESTTREE_="$1"
304 - if [ ! -d "${D}usr/share/doc/${PF}/${_E_DOCDESTTREE_}" ]; then
305 - install -d "${D}usr/share/doc/${PF}/${_E_DOCDESTTREE_}"
306 + local ed=${ED}
307 + case "$EAPI" in 0|1|2) d=${D} ;; esac
308 + if [ ! -d "${ed}usr/share/doc/${PF}/${_E_DOCDESTTREE_}" ]; then
309 + install -d "${ed}usr/share/doc/${PF}/${_E_DOCDESTTREE_}"
310 local ret=$?
311 if [[ $ret -ne 0 ]] ; then
312 helpers_die "${FUNCNAME[0]} failed"
313 @@ -2091,17 +2105,19 @@ if ! has "$EBUILD_PHASE" clean cleanrm ; then
314 PATH=$_ebuild_helpers_path:$PREROOTPATH${PREROOTPATH:+:}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin${ROOTPATH:+:}$ROOTPATH
315 unset _ebuild_helpers_path
316
317 + _eprefix=${EPREFIX}
318 + case "$EAPI" in 0|1|2) _eprefix= ;; esac
319 # Use default ABI libdir in accordance with bug #355283.
320 x=LIBDIR_${DEFAULT_ABI}
321 [[ -n $DEFAULT_ABI && -n ${!x} ]] && x=${!x} || x=lib
322
323 if has distcc $FEATURES ; then
324 - PATH="/usr/$x/distcc/bin:$PATH"
325 + PATH="${_eprefix}/usr/$x/distcc/bin:$PATH"
326 [[ -n $DISTCC_LOG ]] && addwrite "${DISTCC_LOG%/*}"
327 fi
328
329 if has ccache $FEATURES ; then
330 - PATH="/usr/$x/ccache/bin:$PATH"
331 + PATH="${_eprefix}/usr/$x/ccache/bin:$PATH"
332
333 if [[ -n $CCACHE_DIR ]] ; then
334 addread "$CCACHE_DIR"
335 @@ -2111,7 +2127,7 @@ if ! has "$EBUILD_PHASE" clean cleanrm ; then
336 [[ -n $CCACHE_SIZE ]] && ccache -M $CCACHE_SIZE &> /dev/null
337 fi
338
339 - unset x
340 + unset x _eprefix
341
342 if [[ -n $QA_PREBUILT ]] ; then
343
344
345 diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
346 index 1a38d42..0c0ed6a 100644
347 --- a/pym/portage/dbapi/vartree.py
348 +++ b/pym/portage/dbapi/vartree.py
349 @@ -1980,10 +1980,11 @@ class dblink(object):
350 unmerge_desc["!mtime"] = _("!mtime")
351 unmerge_desc["!obj"] = _("!obj")
352 unmerge_desc["!sym"] = _("!sym")
353 + unmerge_desc["!prefix"] = _("!prefix")
354
355 real_root = self.settings['ROOT']
356 real_root_len = len(real_root) - 1
357 - eroot_split_len = len(self.settings["EROOT"].split(os.sep)) - 1
358 + eroot = self.settings["EROOT"]
359
360 # These files are generated by emerge, so we need to remove
361 # them when they are the only thing left in a directory.
362 @@ -2023,6 +2024,12 @@ class dblink(object):
363
364 file_data = pkgfiles[objkey]
365 file_type = file_data[0]
366 +
367 + # don't try to unmerge the prefix offset itself
368 + if len(obj) <= len(eroot) or not obj.startswith(eroot):
369 + show_unmerge("---", unmerge_desc["!prefix"], file_type, obj)
370 + continue
371 +
372 statobj = None
373 try:
374 statobj = os.stat(obj)
375
376 diff --git a/pym/portage/package/ebuild/doebuild.py b/pym/portage/package/ebuild/doebuild.py
377 index 45b2863..7b3561e 100644
378 --- a/pym/portage/package/ebuild/doebuild.py
379 +++ b/pym/portage/package/ebuild/doebuild.py
380 @@ -268,7 +268,9 @@ def doebuild_environment(myebuild, mydo, myroot=None, settings=None,
381 mysettings["T"] = os.path.join(mysettings["PORTAGE_BUILDDIR"], "temp")
382
383 # Prefix forward compatability
384 - mysettings["ED"] = mysettings["D"]
385 + eprefix_lstrip = mysettings["EPREFIX"].lstrip(os.sep)
386 + mysettings["ED"] = os.path.join(
387 + mysettings["D"], eprefix_lstrip).rstrip(os.sep) + os.sep
388
389 mysettings["PORTAGE_BASHRC"] = os.path.join(
390 mysettings["PORTAGE_CONFIGROOT"], EBUILD_SH_ENV_FILE)
391
392 diff --git a/pym/portage/tests/emerge/test_simple.py b/pym/portage/tests/emerge/test_simple.py
393 index f6f5ab0..7715221 100644
394 --- a/pym/portage/tests/emerge/test_simple.py
395 +++ b/pym/portage/tests/emerge/test_simple.py
396 @@ -17,12 +17,23 @@ class SimpleEmergeTestCase(TestCase):
397
398 def testSimple(self):
399
400 + install_something = """
401 +S="${WORKDIR}"
402 +src_install() {
403 + einfo "installing something..."
404 + insinto /usr/lib/${P}
405 + echo "blah blah blah" > "${T}"/regular-file
406 + doins "${T}"/regular-file
407 +}
408 +"""
409 +
410 ebuilds = {
411 "dev-libs/A-1": {
412 "EAPI" : "4",
413 "IUSE" : "+flag",
414 "KEYWORDS": "x86",
415 "LICENSE": "GPL-2",
416 + "MISC_CONTENT": install_something,
417 "RDEPEND": "flag? ( dev-libs/B[flag] )",
418 },
419 "dev-libs/B-1": {
420 @@ -30,6 +41,7 @@ class SimpleEmergeTestCase(TestCase):
421 "IUSE" : "+flag",
422 "KEYWORDS": "x86",
423 "LICENSE": "GPL-2",
424 + "MISC_CONTENT": install_something,
425 },
426 }
427
428 @@ -49,6 +61,21 @@ class SimpleEmergeTestCase(TestCase):
429 "LICENSE": "GPL-2",
430 "USE": "flag",
431 },
432 + "dev-libs/depclean-me-1": {
433 + "EAPI" : "4",
434 + "IUSE" : "",
435 + "KEYWORDS": "x86",
436 + "LICENSE": "GPL-2",
437 + "USE": "",
438 + },
439 + "app-misc/depclean-me-1": {
440 + "EAPI" : "4",
441 + "IUSE" : "",
442 + "KEYWORDS": "x86",
443 + "LICENSE": "GPL-2",
444 + "RDEPEND": "dev-libs/depclean-me",
445 + "USE": "",
446 + },
447 }
448
449 test_args = (
450 @@ -58,6 +85,7 @@ class SimpleEmergeTestCase(TestCase):
451 ("--pretend", "dev-libs/A"),
452 ("--pretend", "--tree", "--complete-graph", "dev-libs/A"),
453 ("-p", "dev-libs/B"),
454 + ("--oneshot", "dev-libs/B",),
455 ("--oneshot", "dev-libs/A",),
456 ("--noreplace", "dev-libs/A",),
457 ("--pretend", "--depclean", "--verbose", "dev-libs/B"),
458 @@ -106,6 +134,8 @@ class SimpleEmergeTestCase(TestCase):
459 "INFOPATH" : "",
460 "PATH" : path,
461 "PORTAGE_GRPNAME" : os.environ["PORTAGE_GRPNAME"],
462 + "PORTAGE_INST_GID" : str(portage.data.portage_gid),
463 + "PORTAGE_INST_UID" : str(portage.data.portage_uid),
464 "PORTAGE_TMPDIR" : portage_tmpdir,
465 "PORTAGE_USERNAME" : os.environ["PORTAGE_USERNAME"],
466 "PORTDIR" : portdir,
467 @@ -130,15 +160,16 @@ class SimpleEmergeTestCase(TestCase):
468 for args in test_args:
469 proc = subprocess.Popen([portage._python_interpreter, "-Wd",
470 os.path.join(PORTAGE_BIN_PATH, "emerge")] + list(args),
471 - env=env, stdout=subprocess.PIPE)
472 - output = proc.stdout.readlines()
473 + env=env)
474 + #output = proc.stdout.readlines()
475 proc.wait()
476 - proc.stdout.close()
477 - if proc.returncode != os.EX_OK:
478 - for line in output:
479 - sys.stderr.write(_unicode_decode(line))
480 + #proc.stdout.close()
481 + #if proc.returncode != os.EX_OK:
482 + # for line in output:
483 + # sys.stderr.write(_unicode_decode(line))
484
485 self.assertEqual(os.EX_OK, proc.returncode,
486 "emerge failed with args %s" % (args,))
487 finally:
488 - playground.cleanup()
489 + pass
490 + ##playground.cleanup()
491
492 diff --git a/pym/portage/tests/resolver/ResolverPlayground.py b/pym/portage/tests/resolver/ResolverPlayground.py
493 index f41126b..28567b3 100644
494 --- a/pym/portage/tests/resolver/ResolverPlayground.py
495 +++ b/pym/portage/tests/resolver/ResolverPlayground.py
496 @@ -120,6 +120,7 @@ class ResolverPlayground(object):
497 rdepend = metadata.pop("RDEPEND", None)
498 pdepend = metadata.pop("PDEPEND", None)
499 required_use = metadata.pop("REQUIRED_USE", None)
500 + misc_content = metadata.pop("MISC_CONTENT", None)
501
502 if metadata:
503 raise ValueError("metadata of ebuild '%s' contains unknown keys: %s" % (cpv, metadata.keys()))
504 @@ -152,6 +153,8 @@ class ResolverPlayground(object):
505 f.write('PDEPEND="' + str(pdepend) + '"\n')
506 if required_use is not None:
507 f.write('REQUIRED_USE="' + str(required_use) + '"\n')
508 + if misc_content is not None:
509 + f.write(misc_content)
510 f.close()
511
512 def _create_ebuild_manifests(self, ebuilds):
513
514 diff --git a/pym/portage/xml/metadata.py b/pym/portage/xml/metadata.py
515 index ef335e2..9e18869 100644
516 --- a/pym/portage/xml/metadata.py
517 +++ b/pym/portage/xml/metadata.py
518 @@ -36,10 +36,19 @@ except ImportError:
519 import xml.etree.ElementTree as etree
520
521 import re
522 +import xml.etree.ElementTree
523 import portage
524 from portage import os
525 from portage.util import unique_everseen
526
527 +class _MetadataTreeBuilder(xml.etree.ElementTree.TreeBuilder):
528 + """
529 + Implements doctype() as required to avoid deprecation warnings with
530 + Python >=2.7.
531 + """
532 + def doctype(self, name, pubid, system):
533 + pass
534 +
535 class _Maintainer(object):
536 """An object for representing one maintainer.
537
538 @@ -173,7 +182,8 @@ class MetaDataXML(object):
539 self._xml_tree = None
540
541 try:
542 - self._xml_tree = etree.parse(metadata_xml_path)
543 + self._xml_tree = etree.parse(metadata_xml_path,
544 + parser=etree.XMLParser(target=_MetadataTreeBuilder()))
545 except ImportError:
546 pass
547
548 @@ -208,7 +218,8 @@ class MetaDataXML(object):
549
550 if self._herdstree is None:
551 try:
552 - self._herdstree = etree.parse(self._herds_path)
553 + self._herdstree = etree.parse(self._herds_path,
554 + parser=etree.XMLParser(target=_MetadataTreeBuilder()))
555 except (ImportError, IOError, SyntaxError):
556 return None