/[gentoo-x86]/eclass/subversion.eclass
Gentoo

Diff of /eclass/subversion.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.59 Revision 1.71
1# Copyright 1999-2008 Gentoo Foundation 1# Copyright 1999-2011 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2 2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/subversion.eclass,v 1.59 2008/05/15 13:27:40 zlin Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/subversion.eclass,v 1.71 2011/12/14 23:40:18 vapier Exp $
4 4
5# @ECLASS: subversion.eclass 5# @ECLASS: subversion.eclass
6# @MAINTAINER: 6# @MAINTAINER:
7# Akinori Hattori <hattya@gentoo.org> 7# Akinori Hattori <hattya@gentoo.org>
8# Bo ├śrsted Andresen <zlin@gentoo.org> 8# Bo ├śrsted Andresen <zlin@gentoo.org>
9# 9# Arfrever Frehtes Taifersar Arahesis <arfrever@gentoo.org>
10# @AUTHOR:
10# Original Author: Akinori Hattori <hattya@gentoo.org> 11# Original Author: Akinori Hattori <hattya@gentoo.org>
11#
12# @BLURB: The subversion eclass is written to fetch software sources from subversion repositories 12# @BLURB: The subversion eclass is written to fetch software sources from subversion repositories
13# @DESCRIPTION: 13# @DESCRIPTION:
14# The subversion eclass provides functions to fetch, patch and bootstrap 14# The subversion eclass provides functions to fetch, patch and bootstrap
15# software sources from subversion repositories. 15# software sources from subversion repositories.
16 16
17inherit eutils 17inherit eutils
18 18
19ESVN="${ECLASS}" 19ESVN="${ECLASS}"
20 20
21case "${EAPI:-0}" in
22 0|1)
21EXPORT_FUNCTIONS src_unpack pkg_preinst 23 EXPORT_FUNCTIONS src_unpack pkg_preinst
24 ;;
25 *)
26 EXPORT_FUNCTIONS src_unpack src_prepare pkg_preinst
27 ;;
28esac
22 29
23DESCRIPTION="Based on the ${ECLASS} eclass" 30DESCRIPTION="Based on the ${ECLASS} eclass"
24 31
25DEPEND="dev-util/subversion 32SUBVERSION_DEPEND="dev-vcs/subversion
26 net-misc/rsync" 33 net-misc/rsync"
34
35if [[ -z "${ESVN_DISABLE_DEPENDENCIES}" ]]; then
36 DEPEND="${SUBVERSION_DEPEND}"
37fi
27 38
28# @ECLASS-VARIABLE: ESVN_STORE_DIR 39# @ECLASS-VARIABLE: ESVN_STORE_DIR
29# @DESCRIPTION: 40# @DESCRIPTION:
30# subversion sources store directory. Users may override this in /etc/make.conf 41# subversion sources store directory. Users may override this in /etc/make.conf
31[[ -z ${ESVN_STORE_DIR} ]] && ESVN_STORE_DIR="${PORTAGE_ACTUAL_DISTDIR:-${DISTDIR}}/svn-src" 42[[ -z ${ESVN_STORE_DIR} ]] && ESVN_STORE_DIR="${PORTAGE_ACTUAL_DISTDIR:-${DISTDIR}}/svn-src"
74# to a specific revision 85# to a specific revision
75# 86#
76# Note: This should never be set in an ebuild! 87# Note: This should never be set in an ebuild!
77ESVN_REVISION="${ESVN_REVISION:-}" 88ESVN_REVISION="${ESVN_REVISION:-}"
78 89
90# @ECLASS-VARIABLE: ESVN_USER
91# @DESCRIPTION:
92# User name
93ESVN_USER="${ESVN_USER:-}"
94
95# @ECLASS-VARIABLE: ESVN_PASSWORD
96# @DESCRIPTION:
97# Password
98ESVN_PASSWORD="${ESVN_PASSWORD:-}"
99
79# @ECLASS-VARIABLE: ESVN_PROJECT 100# @ECLASS-VARIABLE: ESVN_PROJECT
80# @DESCRIPTION: 101# @DESCRIPTION:
81# project name of your ebuild (= name space) 102# project name of your ebuild (= name space)
82# 103#
83# subversion eclass will check out the subversion repository like: 104# subversion eclass will check out the subversion repository like:
119# this should be a space delimited list of subversion eclass features to 140# this should be a space delimited list of subversion eclass features to
120# restrict. 141# restrict.
121# export) 142# export)
122# don't export the working copy to S. 143# don't export the working copy to S.
123ESVN_RESTRICT="${ESVN_RESTRICT:-}" 144ESVN_RESTRICT="${ESVN_RESTRICT:-}"
145
146# @ECLASS-VARIABLE: ESVN_DISABLE_DEPENDENCIES
147# @DESCRIPTION:
148# Set this variable to a non-empty value to disable the automatic inclusion of
149# Subversion in dependencies.
150ESVN_DISABLE_DEPENDENCIES="${ESVN_DISABLE_DEPENDENCIES:-}"
124 151
125# @ECLASS-VARIABLE: ESVN_OFFLINE 152# @ECLASS-VARIABLE: ESVN_OFFLINE
126# @DESCRIPTION: 153# @DESCRIPTION:
127# Set this variable to a non-empty value to disable the automatic updating of 154# Set this variable to a non-empty value to disable the automatic updating of
128# an svn source tree. This is intended to be set outside the subversion source 155# an svn source tree. This is intended to be set outside the subversion source
167 # check for the protocol 194 # check for the protocol
168 local protocol="${repo_uri%%:*}" 195 local protocol="${repo_uri%%:*}"
169 196
170 case "${protocol}" in 197 case "${protocol}" in
171 http|https) 198 http|https)
172 if ! built_with_use --missing true -o dev-util/subversion webdav-neon webdav-serf || \ 199 if ! built_with_use -o dev-vcs/subversion webdav-neon webdav-serf; then
173 built_with_use --missing false dev-util/subversion nowebdav ; then
174 echo 200 echo
175 eerror "In order to emerge this package, you need to" 201 eerror "In order to emerge this package, you need to"
176 eerror "reinstall Subversion with support for WebDAV." 202 eerror "reinstall Subversion with support for WebDAV."
177 eerror "Subversion requires either Neon or Serf to support WebDAV." 203 eerror "Subversion requires either Neon or Serf to support WebDAV."
178 echo 204 echo
189 addread "/etc/subversion" 215 addread "/etc/subversion"
190 addwrite "${ESVN_STORE_DIR}" 216 addwrite "${ESVN_STORE_DIR}"
191 217
192 if [[ ! -d ${ESVN_STORE_DIR} ]]; then 218 if [[ ! -d ${ESVN_STORE_DIR} ]]; then
193 debug-print "${FUNCNAME}: initial checkout. creating subversion directory" 219 debug-print "${FUNCNAME}: initial checkout. creating subversion directory"
194 mkdir -p "${ESVN_STORE_DIR}" || die "${ESVN}: can't mkdir ${ESVN_STORE_DIR}." 220 mkdir -m 775 -p "${ESVN_STORE_DIR}" || die "${ESVN}: can't mkdir ${ESVN_STORE_DIR}."
195 fi 221 fi
196 222
197 cd "${ESVN_STORE_DIR}" || die "${ESVN}: can't chdir to ${ESVN_STORE_DIR}" 223 pushd "${ESVN_STORE_DIR}" > /dev/null || die "${ESVN}: can't chdir to ${ESVN_STORE_DIR}"
198 224
199 local wc_path="$(subversion__get_wc_path "${repo_uri}")" 225 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
200 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion" 226 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion"
201 227
202 [[ -n "${revision}" ]] && options="${options} -r ${revision}" 228 [[ -n "${revision}" ]] && options="${options} -r ${revision}"
204 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then 230 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then
205 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please" 231 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please"
206 ewarn "see \${ESVN_REPO_URI}" 232 ewarn "see \${ESVN_REPO_URI}"
207 fi 233 fi
208 234
235 if has_version ">=dev-vcs/subversion-1.6.0"; then
236 options="${options} --config-option=config:auth:password-stores="
237 fi
238
209 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\"" 239 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\""
210 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\"" 240 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\""
211 debug-print "${FUNCNAME}: options = \"${options}\"" 241 debug-print "${FUNCNAME}: options = \"${options}\""
212 242
213 if [[ ! -d ${wc_path}/.svn ]]; then 243 if [[ ! -d ${wc_path}/.svn ]]; then
214 if [[ -n ${ESVN_OFFLINE} ]]; then 244 if [[ -n ${ESVN_OFFLINE} ]]; then
215 ewarn "ESVN_OFFLINE cannot be used when the there is no existing checkout." 245 ewarn "ESVN_OFFLINE cannot be used when there is no existing checkout."
216 fi 246 fi
217 # first check out 247 # first check out
218 einfo "subversion check out start -->" 248 einfo "subversion check out start -->"
219 einfo " repository: ${repo_uri}${revision:+@}${revision}" 249 einfo " repository: ${repo_uri}${revision:+@}${revision}"
220 250
221 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}" 251 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}"
222 252
223 mkdir -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}." 253 mkdir -m 775 -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}."
224 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}" 254 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}"
255 if [[ -n "${ESVN_USER}" ]]; then
256 ${ESVN_FETCH_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
257 else
225 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}." 258 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
259 fi
226 260
227 elif [[ -n ${ESVN_OFFLINE} ]]; then 261 elif [[ -n ${ESVN_OFFLINE} ]]; then
262 svn upgrade "${wc_path}" &>/dev/null
263 svn cleanup "${wc_path}" &>/dev/null
228 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy." 264 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy."
229 if [[ -n ${ESVN_REVISION} && ${ESVN_REVISION} != ${ESVN_WC_REVISION} ]]; then 265 if [[ -n ${ESVN_REVISION} && ${ESVN_REVISION} != ${ESVN_WC_REVISION} ]]; then
230 die "${ESVN}: You requested off-line updating and revision ${ESVN_REVISION} but only revision ${ESVN_WC_REVISION} is available locally." 266 die "${ESVN}: You requested off-line updating and revision ${ESVN_REVISION} but only revision ${ESVN_WC_REVISION} is available locally."
231 fi 267 fi
232 einfo "Fetching disabled: Using existing repository copy at revision ${ESVN_WC_REVISION}." 268 einfo "Fetching disabled: Using existing repository copy at revision ${ESVN_WC_REVISION}."
233 else 269 else
270 svn upgrade "${wc_path}" &>/dev/null
271 svn cleanup "${wc_path}" &>/dev/null
234 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy." 272 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy."
235 273
236 local esvn_up_freq= 274 local esvn_up_freq=
237 if [[ -n ${ESVN_UP_FREQ} ]]; then 275 if [[ -n ${ESVN_UP_FREQ} ]]; then
238 if [[ -n ${ESVN_UP_FREQ//[[:digit:]]} ]]; then 276 if [[ -n ${ESVN_UP_FREQ//[[:digit:]]} ]]; then
251 einfo " new repository: ${repo_uri}${revision:+@}${revision}" 289 einfo " new repository: ${repo_uri}${revision:+@}${revision}"
252 290
253 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}" 291 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}"
254 292
255 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}" 293 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
294 if [[ -n "${ESVN_USER}" ]]; then
295 ${ESVN_SWITCH_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" ${repo_uri} || die "${ESVN}: can't update ${wc_path} from ${repo_uri}."
296 else
256 ${ESVN_SWITCH_CMD} ${options} ${repo_uri} || die "${ESVN}: can't update ${wc_path} from ${repo_uri}" 297 ${ESVN_SWITCH_CMD} ${options} ${repo_uri} || die "${ESVN}: can't update ${wc_path} from ${repo_uri}."
298 fi
257 else 299 else
258 # update working copy 300 # update working copy
259 einfo "subversion update start -->" 301 einfo "subversion update start -->"
260 einfo " repository: ${repo_uri}${revision:+@}${revision}" 302 einfo " repository: ${repo_uri}${revision:+@}${revision}"
261 303
262 debug-print "${FUNCNAME}: ${ESVN_UPDATE_CMD} ${options}" 304 debug-print "${FUNCNAME}: ${ESVN_UPDATE_CMD} ${options}"
263 305
264 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}" 306 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
307 if [[ -n "${ESVN_USER}" ]]; then
308 ${ESVN_UPDATE_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" || die "${ESVN}: can't update ${wc_path} from ${repo_uri}."
309 else
265 ${ESVN_UPDATE_CMD} ${options} || die "${ESVN}: can't update ${wc_path} from ${repo_uri}." 310 ${ESVN_UPDATE_CMD} ${options} || die "${ESVN}: can't update ${wc_path} from ${repo_uri}."
311 fi
266 fi 312 fi
267 fi 313 fi
268 fi 314 fi
269 315
270 einfo " working copy: ${wc_path}" 316 einfo " working copy: ${wc_path}"
271 317
272 if ! has "export" ${ESVN_RESTRICT}; then 318 if ! has "export" ${ESVN_RESTRICT}; then
273 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}" 319 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
274 320
275 local S="${S}/${S_dest}" 321 local S="${S}/${S_dest}"
322 mkdir -p "${S}"
276 323
277 # export to the ${WORKDIR} 324 # export to the ${WORKDIR}
278 #* "svn export" has a bug. see http://bugs.gentoo.org/119236 325 #* "svn export" has a bug. see http://bugs.gentoo.org/119236
279 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}." 326 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}."
280 rsync -rlpgo --exclude=".svn/" . "${S}" || die "${ESVN}: can't export to ${S}." 327 rsync -rlpgo --exclude=".svn/" . "${S}" || die "${ESVN}: can't export to ${S}."
281 fi 328 fi
282 329
330 popd > /dev/null
331
283 echo 332 echo
284} 333}
285 334
286# @FUNCTION: subversion_bootstrap 335# @FUNCTION: subversion_bootstrap
287# @DESCRIPTION: 336# @DESCRIPTION:
334 fi 383 fi
335} 384}
336 385
337# @FUNCTION: subversion_src_unpack 386# @FUNCTION: subversion_src_unpack
338# @DESCRIPTION: 387# @DESCRIPTION:
339# default src_unpack. fetch and bootstrap. 388# Default src_unpack. Fetch and, in older EAPIs, bootstrap.
340subversion_src_unpack() { 389subversion_src_unpack() {
341 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch." 390 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch."
391 if has "${EAPI:-0}" 0 1; then
392 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
393 fi
394}
395
396# @FUNCTION: subversion_src_prepare
397# @DESCRIPTION:
398# Default src_prepare. Bootstrap.
399subversion_src_prepare() {
342 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap." 400 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
343} 401}
344 402
345# @FUNCTION: subversion_wc_info 403# @FUNCTION: subversion_wc_info
346# @USAGE: [repo_uri] 404# @USAGE: [repo_uri]

Legend:
Removed from v.1.59  
changed lines
  Added in v.1.71

  ViewVC Help
Powered by ViewVC 1.1.20