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 |