>>>>> On Fri, 21 Mar 2008, Christian Faulhammer wrote:

> "Jorge Manuel B. S. Vicetto" <[EMAIL PROTECTED]>:
>> With the help of Ingmar we did some cleanup and added support for 
>> eclass-manpages at 
>> http://git.overlays.gentoo.org/gitweb/?p=proj/desktop-effects.git;a=blob_plain;f=eclass/bzr.eclass;hb=bzr.
>>  
>> I'll be moving the updated eclass to the master branch, testing and 
>> asking users to try it out during this weekend.
>> This eclass is used in the overlay for the live
>> avant-window-navigator ebuilds, so it's probably not as used/tested
>> as the remaining packages. It has provided us the support we needed
>> for awn, but you might need additional features or to review existing
>> ones. Please test the updated eclass on your overlay, feel free to
>> maintain it and, when you think its ready, add it to the tree. When
>> you do so, I'll remove it from our overlay and we'll use the eclass
>> on the tree.

>  We have a prior version for some time now in the Emacs overlay for
> two live ebuilds...so we go and merge your changed (ulm already
> did), test it and report any problems.

As I just learned there are (at least) three overlays using
bzr.eclass, namely desktop-effects, emacs, and ltsp.

So I think it is justified to move bzr.eclass to the Portage tree.
Currect version of bzr.eclass is attached.

Please raise your objections *now*.

Ulrich

# Copyright 1999-2008 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
#
# @ECLASS: bzr.eclass
# @MAINTAINER:
# Jorge Manuel B. S. Vicetto <jmbsvicetto>@gentoo.org
# @BLURB: This eclass provides support to use the Bazaar DSCM
# @DESCRIPTION:
# The bzr.eclass provides support for apps using the bazaar DSCM (distributed 
source control management system).
# The eclass was originally derived from the git eclass.
#
# Note: Just set EBZR_REPO_URI to the url of the branch and the src_unpack
# this eclass provides will put an export of the branch in ${WORKDIR}/${PN}.

inherit eutils

EBZR="bzr.eclass"

EXPORT_FUNCTIONS src_unpack

HOMEPAGE="http://bazaar-vcs.org/";
DESCRIPTION="Based on the ${EBZR} eclass"

DEPEND=">=dev-util/bzr-0.92"

# @ECLASS-VARIABLE: EBZR_STORE_DIR
# @DESCRIPTION:
# The dir to store the bzr sources.
EBZR_STORE_DIR="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/bzr-src"

# @ECLASS-VARIABLE: EBZR_FETCH_CMD
# @DESCRIPTION:
# The bzr command to fetch the sources.
EBZR_FETCH_CMD="bzr branch"

# @ECLASS-VARIABLE: EBZR_UPDATE_CMD
# @DESCRIPTION:
# The bzr command to update the sources.
EBZR_UPDATE_CMD="bzr pull"

# @ECLASS-VARIABLE: EBZR_DIFFSTAT_CMD
# @DESCRIPTION:
# The bzr command to get the diffstat output.
EBZR_DIFFSTAT_CMD="bzr diff"

# @ECLASS-VARIABLE: EBZR_EXPORT_CMD
# @DESCRIPTION:
# The bzr command to export a branch.
EBZR_EXPORT_CMD="bzr export"

# @ECLASS-VARIABLE: EBZR_REVNO_CMD
# @DESCRIPTION:
# The bzr command to list revision number of the branch.
EBZR_REVNO_CMD="bzr revno"

# @ECLASS-VARIABLE: EBZR_OPTIONS
# @DESCRIPTION:
# The options passed to the fetch and update commands.
EBZR_OPTIONS="${EBZR_OPTIONS:-}"

# @ECLASS-VARIABLE: EBZR_REPO_URI
# @DESCRIPTION:
# The repository uri for the source package.
#
# @CODE
# Supported protocols:
#               - http://
#               - https://
#               - sftp://
#               - rsync://
#               - lp://
# @CODE
#
# Note: lp = https://launchpad.net
EBZR_REPO_URI="${EBZR_REPO_URI:-}"

# @ECLASS-VARIABLE: EBZR_BOOTSTRAP
# @DESCRIPTION:
# Bootstrap script or command like autogen.sh or etc.
EBZR_BOOTSTRAP="${EBZR_BOOTSTRAP:-}"

# @ECLASS-VARIABLE: EBZR_PATCHES
# @DESCRIPTION:
# bzr eclass can apply patches in bzr_bootstrap().
# you can use regexp in this valiable like *.diff or *.patch or etc.
# NOTE: this patches will applied before EBZR_BOOTSTRAP is processed.
#
# Patches are searched both in ${PWD} and ${FILESDIR}, if not found in either
# location, the installation dies.
EBZR_PATCHES="${EBZR_PATCHES:-}"

# @ECLASS-VARIABLE: EBZR_BRANCH
# @DESCRIPTION:
# The branch to fetch in bzr_fetch().
#
# default: trunk
EBZR_BRANCH="${EBZR_BRANCH:-trunk}"

# @ECLASS-VARIABLE: EBZR_REVISION
# @DESCRIPTION:
# Revision to get, if not latest (see http://bazaar-vcs.org/BzrRevisionSpec)
EBZR_REVISION="${EBZR_REVISION:-}"

# @ECLASS-VARIABLE: EBZR_CACHE_DIR
# @DESCRIPTION:
# The dir to store the source for the package, relative to EBZR_STORE_DIR.
#
# default: ${PN}
EBZR_CACHE_DIR="${EBZR_CACHE_DIR:-${PN}}"

# @FUNCTION: bzr_fetch
# @DESCRIPTION:
# Wrapper function to fetch sources from bazaar via bzr fetch or bzr update,
# depending on whether there is an existing working copy in ${EBZR_BRANCH_DIR}.
bzr_fetch() {
        local EBZR_BRANCH_DIR

        # EBZR_REPO_URI is empty.
        [[ -z ${EBZR_REPO_URI} ]] && die "${EBZR}: EBZR_REPO_URI is empty."

        # check for the protocol or pull from a local repo.
        if [[ -z ${EBZR_REPO_URI%%:*} ]] ; then
                case ${EBZR_REPO_URI%%:*} in
                        # lp:// is https://launchpad.net
                        http|https|rsync|sftp|lp)
                                ;;
                        *)
                                die "${EBZR}: fetch from ${EBZR_REPO_URI%:*} is 
not yet implemented."
                                ;;
                esac
        fi

        if [[ ! -d ${EBZR_STORE_DIR} ]] ; then
                debug-print "${FUNCNAME}: initial branch. creating bzr 
directory"
                addwrite /
                mkdir -p "${EBZR_STORE_DIR}" \
                        || die "${EBZR}: can't mkdir ${EBZR_STORE_DIR}."
                chmod -f o+rw "${EBZR_STORE_DIR}" \
                        || die "${EBZR}: can't chmod ${EBZR_STORE_DIR}."
                export SANDBOX_WRITE="${SANDBOX_WRITE%%:/}"
        fi

        cd -P "${EBZR_STORE_DIR}" || die "${EBZR}: can't chdir to 
${EBZR_STORE_DIR}"

        EBZR_BRANCH_DIR="${EBZR_STORE_DIR}/${EBZR_CACHE_DIR}"

        addwrite "${EBZR_STORE_DIR}"
        addwrite "${EBZR_BRANCH_DIR}"

        debug-print "${FUNCNAME}: EBZR_OPTIONS = ${EBZR_OPTIONS}"

        local repository

        if [[ ${EBZR_REPO_URI} == */* ]]; then
                repository="${EBZR_REPO_URI}${EBZR_BRANCH}"
        else
                repository="${EBZR_REPO_URI}"
        fi

        if [[ ! -d ${EBZR_BRANCH_DIR} ]] ; then
                # fetch branch
                einfo "bzr branch start -->"
                einfo "   repository: ${repository} => ${EBZR_BRANCH_DIR}"

                ${EBZR_FETCH_CMD} ${EBZR_OPTIONS} "${repository}" 
"${EBZR_BRANCH_DIR}" \
                        || die "${EBZR}: can't branch from ${repository}."

        else
                # update branch
                einfo "bzr pull start -->"
                einfo "   repository: ${repository}"

                cd "${EBZR_BRANCH_DIR}"
                ${EBZR_UPDATE_CMD} ${EBZR_OPTIONS} "${repository}" \
                        || die "${EBZR}: can't merge from ${repository}."
                ${EBZR_DIFFSTAT_CMD}
        fi

        cd "${EBZR_BRANCH_DIR}"

        einfo "exporting ..."
        ${EBZR_EXPORT_CMD} ${EBZR_REVISION:+-r ${EBZR_REVISION}} 
"${WORKDIR}/${P}" \
                        || die "${EBZR}: export failed"

        local revision
        if [[ -n "${EBZR_REVISION}" ]]; then
                revision="${EBZR_REVISION}"
        else
                revision=$(${EBZR_REVNO_CMD} "${EBZR_BRANCH_DIR}")
        fi

        einfo "Revision ${revision} is now in ${WORKDIR}/${P}"

        cd "${WORKDIR}"
}

# @FUNCTION: bzr_bootstrap
# @DESCRIPTION:
# Apply patches in ${EBZR_PATCHES} and run ${EBZR_BOOTSTRAP} if specified
bzr_bootstrap() {
        local patch lpatch

        cd "${S}"

        if [[ -n ${EBZR_PATCHES} ]] ; then
                einfo "apply patches -->"

                for patch in ${EBZR_PATCHES} ; do
                        if [[ -f ${patch} ]] ; then
                                epatch ${patch}
                        else
                                for lpatch in "${FILESDIR}"/${patch} ; do
                                        if [[ -f ${lpatch} ]] ; then
                                                epatch ${lpatch}
                                        else
                                                die "${EBZR}: ${patch} is not 
found"
                                        fi
                                done
                        fi
                done
                echo
        fi

        if [[ -n ${EBZR_BOOTSTRAP} ]] ; then
                einfo "begin bootstrap -->"

                if [[ -f ${EBZR_BOOTSTRAP} ]] && [[ -x ${EBZR_BOOTSTRAP} ]] ; 
then
                        einfo "   bootstrap with a file: ${EBZR_BOOTSTRAP}"
                        "./${EBZR_BOOTSTRAP}" \
                                || die "${EBZR}: can't execute EBZR_BOOTSTRAP."
                else
                        einfo "   bootstrap with commands: ${EBZR_BOOTSTRAP}"
                        "${EBZR_BOOTSTRAP}" \
                                || die "${EBZR}: can't eval EBZR_BOOTSTRAP."
                fi
        fi
}

# @FUNCTION: bzr_src_unpack
# @DESCRIPTION:
# default src_unpack. fetch and bootstrap.
bzr_src_unpack() {
        bzr_fetch || die "${EBZR}: unknown problem in bzr_fetch()."
        bzr_bootstrap || die "${EBZR}: unknown problem in bzr_bootstrap()."
}

Reply via email to