public inbox for gentoo-dev@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-dev] bzr.eclass: The next level (this time with patch)
@ 2009-03-06  7:54 Christian Faulhammer
  2009-03-06 16:15 ` René 'Necoro' Neumann
  2009-03-11  0:46 ` [gentoo-dev] " René 'Necoro' Neumann
  0 siblings, 2 replies; 7+ messages in thread
From: Christian Faulhammer @ 2009-03-06  7:54 UTC (permalink / raw
  To: gentoo-dev


[-- 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 --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2009-03-30 21:55 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-06  7:54 [gentoo-dev] bzr.eclass: The next level (this time with patch) Christian Faulhammer
2009-03-06 16:15 ` 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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox