From: Christian Faulhammer <fauli@gentoo.org>
To: gentoo-dev@lists.gentoo.org <gentoo-dev@lists.gentoo.org>
Subject: [gentoo-dev] bzr.eclass: The next level (this time with patch)
Date: Fri, 6 Mar 2009 08:54:54 +0100 [thread overview]
Message-ID: <20090306085454.52f4263b@terra.solaris> (raw)
[-- Attachment #1.1: Type: text/plain, Size: 347 bytes --]
Hi,
after the review and more suggestions I would like to post the current
version of the patch:
* EAPI aware (ulm)
* Better documentation
* Some clean ups (a lot of people)
V-Li
--
Christian Faulhammer, Gentoo Lisp project
<URL:http://www.gentoo.org/proj/en/lisp/>, #gentoo-lisp on FreeNode
<URL:http://www.faulhammer.org/>
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: bzr.patch --]
[-- Type: text/x-patch, Size: 10609 bytes --]
--- /usr/portage/eclass/bzr.eclass 2008-10-25 14:17:23.000000000 +0200
+++ bzr.eclass 2009-03-06 08:48:23.000000000 +0100
@@ -1,11 +1,13 @@
-# Copyright 1999-2008 Gentoo Foundation
+# Copyright 1999-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/eclass/bzr.eclass,v 1.1 2008/10/25 12:17:23 ulm Exp $
+# $Header: $
#
# @ECLASS: bzr.eclass
# @MAINTAINER:
# Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>,
# Ulrich Mueller <ulm@gentoo.org>,
+# Christian Faulhammer <fauli@gentoo.org>
+# Mark Lee <bzr-gentoo-overlay@lazymalevolence.com>,
# and anyone who wants to help
# @BLURB: This eclass provides support to use the Bazaar DSCM
# @DESCRIPTION:
@@ -13,14 +15,17 @@
# (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}.
+# Note: Just set EBZR_REPO_URI to the URI of the branch and the src_unpack()
+# of this eclass will put an export of the branch in ${WORKDIR}/${PN}.
inherit eutils
EBZR="bzr.eclass"
-EXPORT_FUNCTIONS src_unpack
+case "${EAPI:-0}" in
+ 0|1) EXPORT_FUNCTIONS src_unpack ;;
+ *) EXPORT_FUNCTIONS src_unpack src_prepare ;;
+esac
HOMEPAGE="http://bazaar-vcs.org/"
DESCRIPTION="Based on the ${EBZR} eclass"
@@ -29,32 +34,32 @@
# @ECLASS-VARIABLE: EBZR_STORE_DIR
# @DESCRIPTION:
-# The dir to store the bzr sources.
+# The directory to store all fetched Bazaar live 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"
+# The Bazaar command to fetch the sources.
+EBZR_FETCH_CMD="bzr checkout --lightweight"
# @ECLASS-VARIABLE: EBZR_UPDATE_CMD
# @DESCRIPTION:
-# The bzr command to update the sources.
-EBZR_UPDATE_CMD="bzr pull"
+# The Bazaar command to update the sources.
+EBZR_UPDATE_CMD="bzr update"
-# @ECLASS-VARIABLE: EBZR_DIFFSTAT_CMD
+# @ECLASS-VARIABLE: EBZR_DIFF_CMD
# @DESCRIPTION:
-# The bzr command to get the diffstat output.
-EBZR_DIFFSTAT_CMD="bzr diff"
+# The Bazaar command to get the diff output.
+EBZR_DIFF_CMD="bzr diff"
# @ECLASS-VARIABLE: EBZR_EXPORT_CMD
# @DESCRIPTION:
-# The bzr command to export a branch.
+# The Bazaar 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.
+# The Bazaar command to list a revision number of the branch.
EBZR_REVNO_CMD="bzr revno"
# @ECLASS-VARIABLE: EBZR_OPTIONS
@@ -64,7 +69,7 @@
# @ECLASS-VARIABLE: EBZR_REPO_URI
# @DESCRIPTION:
-# The repository uri for the source package.
+# The repository URI for the source package.
#
# @CODE
# Supported protocols:
@@ -72,10 +77,10 @@
# - https://
# - sftp://
# - rsync://
-# - lp://
+# - lp:
# @CODE
#
-# Note: lp = https://launchpad.net
+# Note: lp: seems to be an alias for https://launchpad.net
EBZR_REPO_URI="${EBZR_REPO_URI:-}"
# @ECLASS-VARIABLE: EBZR_BOOTSTRAP
@@ -86,38 +91,68 @@
# @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.
+# You can use regular expressions in this variable like *.diff or
+# *.patch and the like.
+# NOTE: These patches will bei 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)
+# Revision to fetch, defaults to the latest (see
+# http://bazaar-vcs.org/BzrRevisionSpec or bzr help revisionspec)
EBZR_REVISION="${EBZR_REVISION:-}"
# @ECLASS-VARIABLE: EBZR_CACHE_DIR
# @DESCRIPTION:
-# The dir to store the source for the package, relative to EBZR_STORE_DIR.
+# The directory to store the source for the package, relative to
+# EBZR_STORE_DIR.
#
# default: ${PN}
EBZR_CACHE_DIR="${EBZR_CACHE_DIR:-${PN}}"
+# @FUNCTION: bzr_initial_fetch
+# @DESCRIPTION:
+# Retrieves the source code from a repository for the first time, via
+# ${EBZR_FETCH_CMD}.
+bzr_initial_fetch() {
+ local repository="${1}";
+ local branch_dir="${2}";
+
+ # fetch branch
+ einfo "bzr fetch start -->"
+ einfo " repository: ${repository} => ${branch_dir}"
+
+ ${EBZR_FETCH_CMD} ${EBZR_OPTIONS} "${repository}" "${branch_dir}" \
+ || die "${EBZR}: can't branch from ${repository}."
+}
+
+# @FUNCTION: bzr_update
+# @DESCRIPTION:
+# Updates the source code from a repository, via ${EBZR_UPDATE_CMD}.
+bzr_update() {
+ local repository="${1}";
+
+ # update branch
+ einfo "bzr update start -->"
+ einfo " repository: ${repository}"
+
+ pushd "${EBZR_BRANCH_DIR}"
+ ${EBZR_UPDATE_CMD} ${EBZR_OPTIONS} \
+ || die "${EBZR}: can't update from ${repository}."
+ popd
+}
+
+
# @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}.
+# Wrapper function to fetch sources from a Bazaar repository 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
+ local EBZR_BRANCH_DIR repository="${EBZR_REPO_URI}"
# EBZR_REPO_URI is empty.
[[ ${EBZR_REPO_URI} ]] || die "${EBZR}: EBZR_REPO_URI is empty."
@@ -125,8 +160,15 @@
# 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)
+ # lp: seems to be an alias to https://launchpad.net
+ http|https|rsync|lp)
+ ;;
+ sftp)
+ if ! built_with_use --missing true dev-util/bzr sftp; then
+ eerror "To fetch sources from ${EBZR_REPO_URI} you need SFTP"
+ eerror "support in dev-util/bzr."
+ die "Please, rebuild dev-util/bzr with the sftp USE flag enabled."
+ fi
;;
*)
die "${EBZR}: fetch from ${EBZR_REPO_URI%:*} is not yet implemented."
@@ -135,14 +177,14 @@
fi
if [[ ! -d ${EBZR_STORE_DIR} ]] ; then
- debug-print "${FUNCNAME}: initial branch. creating bzr directory"
+ debug-print "${FUNCNAME}: initial branch. Creating bzr directory"
addwrite /
mkdir -p "${EBZR_STORE_DIR}" \
|| die "${EBZR}: can't mkdir ${EBZR_STORE_DIR}."
export SANDBOX_WRITE="${SANDBOX_WRITE%%:/}"
fi
- cd -P "${EBZR_STORE_DIR}" || die "${EBZR}: can't chdir to ${EBZR_STORE_DIR}"
+ pushd "${EBZR_STORE_DIR}" || die "${EBZR}: can't chdir to ${EBZR_STORE_DIR}"
EBZR_BRANCH_DIR="${EBZR_STORE_DIR}/${EBZR_CACHE_DIR}"
@@ -151,31 +193,17 @@
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
-
+ # Run bzr_initial_fetch() only if the branch has not been pulled
+ # before or if the existing local copy is a full checkout (as did
+ # an older version of bzr.eclass)
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}."
-
+ bzr_initial_fetch "${repository}" "${EBZR_BRANCH_DIR}"
+ elif [[ -d "${EBZR_BRANCH_DIR}"/.bzr/repository/ ]]; then
+ einfo "Re-fetching the branch to save space..."
+ rm -rf "${EBZR_BRANCH_DIR}"
+ bzr_initial_fetch "${repository}" "${EBZR_BRANCH_DIR}"
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}
+ bzr_update "${repository}" "${EBZR_BRANCH_DIR}"
fi
cd "${EBZR_BRANCH_DIR}"
@@ -193,16 +221,16 @@
einfo "Revision ${revision} is now in ${WORKDIR}/${P}"
- cd "${WORKDIR}"
+ popd
}
# @FUNCTION: bzr_bootstrap
# @DESCRIPTION:
-# Apply patches in ${EBZR_PATCHES} and run ${EBZR_BOOTSTRAP} if specified
+# Apply patches in ${EBZR_PATCHES} and run ${EBZR_BOOTSTRAP} if specified.
bzr_bootstrap() {
- local patch lpatch
+ local patch
- cd "${S}"
+ pushd "${S}"
if [[ -n ${EBZR_PATCHES} ]] ; then
einfo "apply patches -->"
@@ -210,14 +238,10 @@
for patch in ${EBZR_PATCHES} ; do
if [[ -f ${patch} ]] ; then
epatch ${patch}
+ elif [[ -f "${FILESDIR}/${patch}" ]] ; then
+ epatch "${FILESDIR}/${patch}"
else
- for lpatch in "${FILESDIR}"/${patch} ; do
- if [[ -f ${lpatch} ]] ; then
- epatch ${lpatch}
- else
- die "${EBZR}: ${patch} is not found"
- fi
- done
+ die "${EBZR}: ${patch} is not found"
fi
done
fi
@@ -235,12 +259,30 @@
|| die "${EBZR}: can't eval EBZR_BOOTSTRAP."
fi
fi
+
+ popd
}
# @FUNCTION: bzr_src_unpack
# @DESCRIPTION:
-# default src_unpack. fetch and bootstrap.
+# Default src_unpack(). Includes bzr_fetch() and bootstrap().
bzr_src_unpack() {
+ if [ -n ${EBZR_BRANCH} ]; then
+ # This test will go away on 01 Jan 2010
+ eerror "This ebuild uses EBZR_BRANCH which is not supported anymore"
+ eerror "by the bzr.eclass. Please report this to the ebuild maintainer."
+ die "EBZR_BRANCH still defined"
+ fi
bzr_fetch || die "${EBZR}: unknown problem in bzr_fetch()."
+ case "${EAPI:-0}" in
+ 0|1) bzr_src_prepare ;;
+ esac
+}
+
+# @FUNCTION: bzr_src_prepare
+# @DESCRIPTION:
+# Default src_prepare(). Executes bzr_bootstrap() for patch
+# application and Make file generation (if needed).
+bzr_src_prepare() {
bzr_bootstrap || die "${EBZR}: unknown problem in bzr_bootstrap()."
}
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 197 bytes --]
next reply other threads:[~2009-03-06 7:54 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-06 7:54 Christian Faulhammer [this message]
2009-03-06 16:15 ` [gentoo-dev] bzr.eclass: The next level (this time with patch) René 'Necoro' Neumann
2009-03-07 12:32 ` [gentoo-dev] " Christian Faulhammer
2009-03-11 0:46 ` [gentoo-dev] " René 'Necoro' Neumann
2009-03-11 0:54 ` René 'Necoro' Neumann
2009-03-27 0:45 ` [gentoo-dev] " Christian Faulhammer
2009-03-30 21:53 ` René 'Necoro' Neumann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090306085454.52f4263b@terra.solaris \
--to=fauli@gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox