xml/metadata: implement XMLParser.doctype()
authorZac Medico <zmedico@gentoo.org>
Thu, 1 Sep 2011 02:52:58 +0000 (19:52 -0700)
committerZac Medico <zmedico@gentoo.org>
Thu, 1 Sep 2011 02:52:58 +0000 (19:52 -0700)
Avoid deprecation warnings again, like in commit
63035acd702ab0cdaac31e33676b5a20a91eae47.

bin/ebuild-helpers/doexe
bin/ebuild-helpers/doins
bin/ebuild-helpers/dosed
bin/ebuild.sh
pym/portage/dbapi/vartree.py
pym/portage/package/ebuild/doebuild.py
pym/portage/tests/emerge/test_simple.py
pym/portage/tests/resolver/ResolverPlayground.py
pym/portage/xml/metadata.py

index 360800e02e5ea0cb5a35700c9fdc1743dd91372c..f44cfba34cb4024fd56619c640b2c9cdd9df29c0 100755 (executable)
@@ -9,8 +9,10 @@ if [[ $# -lt 1 ]] ; then
        exit 1
 fi
 
-if [[ ! -d ${D}${_E_EXEDESTTREE_} ]] ; then
-       install -d "${D}${_E_EXEDESTTREE_}"
+case "$EAPI" in 0|1|2) ED=${D} ;; esac
+
+if [[ ! -d ${ED}${_E_EXEDESTTREE_} ]] ; then
+       install -d "${ED}${_E_EXEDESTTREE_}"
 fi
 
 TMP=$T/.doexe_tmp
@@ -29,7 +31,7 @@ for x in "$@" ; do
                mysrc="${x}"
        fi
        if [ -e "$mysrc" ] ; then
-               install $EXEOPTIONS "$mysrc" "$D$_E_EXEDESTTREE_"
+               install $EXEOPTIONS "$mysrc" "$ED$_E_EXEDESTTREE_"
        else
                echo "!!! ${0##*/}: $mysrc does not exist" 1>&2
                false
index 7dec146825b8991a8a2e4683ed83b9257faa578e..1ca69a6e903b5bfa9b6520eefc224b476da33249 100755 (executable)
@@ -27,12 +27,14 @@ else
        DOINSRECUR=n
 fi
 
-if [[ ${INSDESTTREE#${D}} != "${INSDESTTREE}" ]]; then
+case "$EAPI" in 0|1|2) export ED="${D}" ;; esac
+
+if [[ ${INSDESTTREE#${ED}} != "${INSDESTTREE}" ]]; then
        vecho "-------------------------------------------------------" 1>&2
-       vecho "You should not use \${D} with helpers." 1>&2
+       vecho "You should not use \${ED} with helpers." 1>&2
        vecho "  --> ${INSDESTTREE}" 1>&2
        vecho "-------------------------------------------------------" 1>&2
-       helpers_die "${0##*/} used with \${D}"
+       helpers_die "${0##*/} used with \${ED}"
        exit 1
 fi
 
@@ -49,7 +51,7 @@ export TMP=$T/.doins_tmp
 # Use separate directories to avoid potential name collisions.
 mkdir -p "$TMP"/{1,2}
 
-[[ ! -d ${D}${INSDESTTREE} ]] && dodir "${INSDESTTREE}"
+[[ ! -d ${ED}${INSDESTTREE} ]] && dodir "${INSDESTTREE}"
 
 _doins() {
        local mysrc="$1" mydir="$2" cleanup="" rval
@@ -63,8 +65,8 @@ _doins() {
                # $PORTAGE_ACTUAL_DISTDIR/.
                if [ $PRESERVE_SYMLINKS = y ] && \
                        ! [[ $(readlink "$mysrc") == "$PORTAGE_ACTUAL_DISTDIR"/* ]] ; then
-                       rm -rf "$D$INSDESTTREE/$mydir/${mysrc##*/}" || return $?
-                       cp -P "$mysrc" "$D$INSDESTTREE/$mydir/${mysrc##*/}"
+                       rm -rf "${ED}$INSDESTTREE/$mydir/${mysrc##*/}" || return $?
+                       cp -P "$mysrc" "${ED}$INSDESTTREE/$mydir/${mysrc##*/}"
                        return $?
                else
                        cp "$mysrc" "$TMP/2/${mysrc##*/}" || return $?
@@ -73,7 +75,7 @@ _doins() {
                fi
        fi
 
-       install ${INSOPTIONS} "${mysrc}" "${D}${INSDESTTREE}/${mydir}"
+       install ${INSOPTIONS} "${mysrc}" "${ED}${INSDESTTREE}/${mydir}"
        rval=$?
        [[ -n ${cleanup} ]] && rm -f "${cleanup}"
        [ $rval -ne 0 ] && echo "!!! ${0##*/}: $mysrc does not exist" 1>&2
index afc949ba53b4fb48935acefad7e41ab76463197e..00cf5da17d71127ced55ce5454e84b5e9dbc15a6 100755 (executable)
@@ -1,5 +1,5 @@
 #!/bin/bash
-# Copyright 1999-2006 Gentoo Foundation
+# Copyright 1999-2011 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 if [[ $# -lt 1 ]] ; then
@@ -7,12 +7,14 @@ if [[ $# -lt 1 ]] ; then
        exit 1
 fi
 
+case "$EAPI" in 0|1|2) ED=${D} ;; esac
+
 ret=0
 file_found=0
-mysed="s:${D}::g"
+mysed="s:${ED}::g"
 
 for x in "$@" ; do
-       y=$D${x#/}
+       y=$ED${x#/}
        if [ -e "${y}" ] ; then
                if [ -f "${y}" ] ; then
                        file_found=1
index 23a12401d3f318d831dd4143f9bc7dce1b9afab5..ae03df7c18d2df32b4a7d1321b10ca5565feaf6a 100755 (executable)
@@ -325,9 +325,11 @@ declare -a PORTAGE_DOCOMPRESS_SKIP=( /usr/share/doc/${PF}/html )
 keepdir() {
        dodir "$@"
        local x
+       local ed=${ED}
+       case "$EAPI" in 0|1|2) ed=${D} ;; esac
        if [ "$1" == "-R" ] || [ "$1" == "-r" ]; then
                shift
-               find "$@" -type d -printf "${D}%p/.keep_${CATEGORY}_${PN}-${SLOT}\n" \
+               find "$@" -type d -printf "${ed}%p/.keep_${CATEGORY}_${PN}-${SLOT}\n" \
                        | tr "\n" "\0" | \
                        while read -r -d $'\0' ; do
                                >> "$REPLY" || \
@@ -335,8 +337,8 @@ keepdir() {
                        done
        else
                for x in "$@"; do
-                       >> "${D}${x}/.keep_${CATEGORY}_${PN}-${SLOT}" || \
-                               die "Failed to create .keep in ${D}${x}"
+                       >> "${ed}${x}/.keep_${CATEGORY}_${PN}-${SLOT}" || \
+                               die "Failed to create .keep in ${ed}${x}"
                done
        fi
 }
@@ -484,6 +486,8 @@ hasg() {
 hasgq() { hasg "$@" >/dev/null ; }
 econf() {
        local x
+       local eprefix=${EPREFIX}
+       case "$EAPI" in 0|1|2) eprefix= ;; esac
 
        local phase_func=$(_ebuild_arg_to_phase "$EAPI" "$EBUILD_PHASE")
        if [[ -n $phase_func ]] ; then
@@ -505,12 +509,12 @@ econf() {
                        sed -e "1s:^#![[:space:]]*/bin/sh:#!$CONFIG_SHELL:" -i "$ECONF_SOURCE/configure" || \
                                die "Substition of shebang in '$ECONF_SOURCE/configure' failed"
                fi
-               if [ -e /usr/share/gnuconfig/ ]; then
+               if [ -e "${eprefix}"/usr/share/gnuconfig/ ]; then
                        find "${WORKDIR}" -type f '(' \
                        -name config.guess -o -name config.sub ')' -print0 | \
                        while read -r -d $'\0' x ; do
-                               vecho " * econf: updating ${x/${WORKDIR}\/} with /usr/share/gnuconfig/${x##*/}"
-                               cp -f /usr/share/gnuconfig/"${x##*/}" "${x}"
+                               vecho " * econf: updating ${x/${WORKDIR}\/} with ${eprefix}/usr/share/gnuconfig/${x##*/}"
+                               cp -f "${eprefix}"/usr/share/gnuconfig/"${x##*/}" "${x}"
                        done
                fi
 
@@ -530,7 +534,7 @@ econf() {
                if [[ -n ${CONF_LIBDIR} ]] && ! hasgq --libdir=\* "$@" ; then
                        export CONF_PREFIX=$(hasg --exec-prefix=\* "$@")
                        [[ -z ${CONF_PREFIX} ]] && CONF_PREFIX=$(hasg --prefix=\* "$@")
-                       : ${CONF_PREFIX:=/usr}
+                       : ${CONF_PREFIX:=${eprefix}/usr}
                        CONF_PREFIX=${CONF_PREFIX#*=}
                        [[ ${CONF_PREFIX} != /* ]] && CONF_PREFIX="/${CONF_PREFIX}"
                        [[ ${CONF_LIBDIR} != /* ]] && CONF_LIBDIR="/${CONF_LIBDIR}"
@@ -538,15 +542,15 @@ econf() {
                fi
 
                set -- \
-                       --prefix=/usr \
+                       --prefix="${eprefix}"/usr \
                        ${CBUILD:+--build=${CBUILD}} \
                        --host=${CHOST} \
                        ${CTARGET:+--target=${CTARGET}} \
-                       --mandir=/usr/share/man \
-                       --infodir=/usr/share/info \
-                       --datadir=/usr/share \
-                       --sysconfdir=/etc \
-                       --localstatedir=/var/lib \
+                       --mandir="${eprefix}"/usr/share/man \
+                       --infodir="${eprefix}"/usr/share/info \
+                       --datadir="${eprefix}"/usr/share \
+                       --sysconfdir="${eprefix}"/etc \
+                       --localstatedir="${eprefix}"/var/lib \
                        "$@" \
                        ${EXTRA_ECONF}
                vecho "${ECONF_SOURCE}/configure" "$@"
@@ -570,6 +574,8 @@ econf() {
 einstall() {
        # CONF_PREFIX is only set if they didn't pass in libdir above.
        local LOCAL_EXTRA_EINSTALL="${EXTRA_EINSTALL}"
+       local ed=${ED}
+       case "$EAPI" in 0|1|2) ed=${D} ;; esac
        LIBDIR_VAR="LIBDIR_${ABI}"
        if [ -n "${ABI}" -a -n "${!LIBDIR_VAR}" ]; then
                CONF_LIBDIR="${!LIBDIR_VAR}"
@@ -584,22 +590,22 @@ einstall() {
 
        if [ -f ./[mM]akefile -o -f ./GNUmakefile ] ; then
                if [ "${PORTAGE_DEBUG}" == "1" ]; then
-                       ${MAKE:-make} -n prefix="${D}usr" \
-                               datadir="${D}usr/share" \
-                               infodir="${D}usr/share/info" \
-                               localstatedir="${D}var/lib" \
-                               mandir="${D}usr/share/man" \
-                               sysconfdir="${D}etc" \
+                       ${MAKE:-make} -n prefix="${ed}usr" \
+                               datadir="${ed}usr/share" \
+                               infodir="${ed}usr/share/info" \
+                               localstatedir="${ed}var/lib" \
+                               mandir="${ed}usr/share/man" \
+                               sysconfdir="${ed}etc" \
                                ${LOCAL_EXTRA_EINSTALL} \
                                ${MAKEOPTS} ${EXTRA_EMAKE} -j1 \
                                "$@" install
                fi
-               ${MAKE:-make} prefix="${D}usr" \
-                       datadir="${D}usr/share" \
-                       infodir="${D}usr/share/info" \
-                       localstatedir="${D}var/lib" \
-                       mandir="${D}usr/share/man" \
-                       sysconfdir="${D}etc" \
+               ${MAKE:-make} prefix="${ed}usr" \
+                       datadir="${ed}usr/share" \
+                       infodir="${ed}usr/share/info" \
+                       localstatedir="${ed}var/lib" \
+                       mandir="${ed}usr/share/man" \
+                       sysconfdir="${ed}etc" \
                        ${LOCAL_EXTRA_EINSTALL} \
                        ${MAKEOPTS} ${EXTRA_EMAKE} -j1 \
                        "$@" install || die "einstall failed"
@@ -795,8 +801,10 @@ into() {
                export DESTTREE=""
        else
                export DESTTREE=$1
-               if [ ! -d "${D}${DESTTREE}" ]; then
-                       install -d "${D}${DESTTREE}"
+               local ed=${ED}
+               case "$EAPI" in 0|1|2) ed=${D} ;; esac
+               if [ ! -d "${ed}${DESTTREE}" ]; then
+                       install -d "${ed}${DESTTREE}"
                        local ret=$?
                        if [[ $ret -ne 0 ]] ; then
                                helpers_die "${FUNCNAME[0]} failed"
@@ -811,8 +819,10 @@ insinto() {
                export INSDESTTREE=""
        else
                export INSDESTTREE=$1
-               if [ ! -d "${D}${INSDESTTREE}" ]; then
-                       install -d "${D}${INSDESTTREE}"
+               local ed=${ED}
+               case "$EAPI" in 0|1|2) d=${D} ;; esac
+               if [ ! -d "${ed}${INSDESTTREE}" ]; then
+                       install -d "${ed}${INSDESTTREE}"
                        local ret=$?
                        if [[ $ret -ne 0 ]] ; then
                                helpers_die "${FUNCNAME[0]} failed"
@@ -827,8 +837,10 @@ exeinto() {
                export _E_EXEDESTTREE_=""
        else
                export _E_EXEDESTTREE_="$1"
-               if [ ! -d "${D}${_E_EXEDESTTREE_}" ]; then
-                       install -d "${D}${_E_EXEDESTTREE_}"
+               local ed=${ED}
+               case "$EAPI" in 0|1|2) d=${D} ;; esac
+               if [ ! -d "${ed}${_E_EXEDESTTREE_}" ]; then
+                       install -d "${ed}${_E_EXEDESTTREE_}"
                        local ret=$?
                        if [[ $ret -ne 0 ]] ; then
                                helpers_die "${FUNCNAME[0]} failed"
@@ -843,8 +855,10 @@ docinto() {
                export _E_DOCDESTTREE_=""
        else
                export _E_DOCDESTTREE_="$1"
-               if [ ! -d "${D}usr/share/doc/${PF}/${_E_DOCDESTTREE_}" ]; then
-                       install -d "${D}usr/share/doc/${PF}/${_E_DOCDESTTREE_}"
+               local ed=${ED}
+               case "$EAPI" in 0|1|2) d=${D} ;; esac
+               if [ ! -d "${ed}usr/share/doc/${PF}/${_E_DOCDESTTREE_}" ]; then
+                       install -d "${ed}usr/share/doc/${PF}/${_E_DOCDESTTREE_}"
                        local ret=$?
                        if [[ $ret -ne 0 ]] ; then
                                helpers_die "${FUNCNAME[0]} failed"
@@ -2091,17 +2105,19 @@ if ! has "$EBUILD_PHASE" clean cleanrm ; then
                        PATH=$_ebuild_helpers_path:$PREROOTPATH${PREROOTPATH:+:}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin${ROOTPATH:+:}$ROOTPATH
                        unset _ebuild_helpers_path
 
+                       _eprefix=${EPREFIX}
+                       case "$EAPI" in 0|1|2) _eprefix= ;; esac
                        # Use default ABI libdir in accordance with bug #355283.
                        x=LIBDIR_${DEFAULT_ABI}
                        [[ -n $DEFAULT_ABI && -n ${!x} ]] && x=${!x} || x=lib
 
                        if has distcc $FEATURES ; then
-                               PATH="/usr/$x/distcc/bin:$PATH"
+                               PATH="${_eprefix}/usr/$x/distcc/bin:$PATH"
                                [[ -n $DISTCC_LOG ]] && addwrite "${DISTCC_LOG%/*}"
                        fi
 
                        if has ccache $FEATURES ; then
-                               PATH="/usr/$x/ccache/bin:$PATH"
+                               PATH="${_eprefix}/usr/$x/ccache/bin:$PATH"
 
                                if [[ -n $CCACHE_DIR ]] ; then
                                        addread "$CCACHE_DIR"
@@ -2111,7 +2127,7 @@ if ! has "$EBUILD_PHASE" clean cleanrm ; then
                                [[ -n $CCACHE_SIZE ]] && ccache -M $CCACHE_SIZE &> /dev/null
                        fi
 
-                       unset x
+                       unset x _eprefix
 
                        if [[ -n $QA_PREBUILT ]] ; then
 
index 1a38d421a993bd6c78844a84f0dc76b3a8333967..0c0ed6a64b15f23977004ea9f687e9912fb7965f 100644 (file)
@@ -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)
index 45b28631c21f5a7eae0ebf645a62888fc58dcf3c..7b3561e778fcf99f61631ea6e2b391086e0c2c88 100644 (file)
@@ -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)
index f6f5ab06ef06b2d67dcea86c79fc4711604f92e6..7715221342a5789f26fdbf7d49391dc19f98642a 100644 (file)
@@ -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()
index f41126bb79d6ffc6124046ce237864d6980476a7..28567b3d776ef0c4e700c27ab2c955b59761d0c8 100644 (file)
@@ -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):
index ef335e29fa3351d7b211650865b3bc0c5f9a279d..9e1886927bde0d5a3b723b308ac00730dbe3a817 100644 (file)
@@ -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