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

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

  ViewVC Help
Powered by ViewVC 1.1.20