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

Diff of /eclass/subversion.eclass

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

Revision 1.65 Revision 1.72
1# Copyright 1999-2009 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.65 2009/04/29 22:26:31 scarabeus Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/subversion.eclass,v 1.72 2011/12/27 22:40:50 neurogeek 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# Arfrever Frehtes Taifersar Arahesis <arfrever@gentoo.org>
10# 10# @AUTHOR:
11# Original Author: Akinori Hattori <hattya@gentoo.org> 11# Original Author: Akinori Hattori <hattya@gentoo.org>
12#
13# @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
14# @DESCRIPTION: 13# @DESCRIPTION:
15# The subversion eclass provides functions to fetch, patch and bootstrap 14# The subversion eclass provides functions to fetch, patch and bootstrap
16# software sources from subversion repositories. 15# software sources from subversion repositories.
17 16
18inherit eutils 17inherit eutils
19 18
20ESVN="${ECLASS}" 19ESVN="${ECLASS}"
21 20
22EXPORTED_FUNCTIONS="src_unpack pkg_preinst"
23case "${EAPI:-0}" in 21case "${EAPI:-0}" in
24 2) EXPORTED_FUNCTIONS="${EXPORTED_FUNCTIONS} src_prepare" ;; 22 0|1)
25 1|0) ;; 23 EXPORT_FUNCTIONS src_unpack pkg_preinst
26 *) die "Unknown EAPI, Bug eclass maintainers." ;; 24 ;;
25 *)
26 EXPORT_FUNCTIONS src_unpack src_prepare pkg_preinst
27 ;;
27esac 28esac
28EXPORT_FUNCTIONS ${EXPORTED_FUNCTIONS}
29 29
30DESCRIPTION="Based on the ${ECLASS} eclass" 30DESCRIPTION="Based on the ${ECLASS} eclass"
31 31
32DEPEND="dev-util/subversion 32SUBVERSION_DEPEND="dev-vcs/subversion
33 net-misc/rsync" 33 net-misc/rsync"
34
35if [[ -z "${ESVN_DISABLE_DEPENDENCIES}" ]]; then
36 DEPEND="${SUBVERSION_DEPEND}"
37fi
34 38
35# @ECLASS-VARIABLE: ESVN_STORE_DIR 39# @ECLASS-VARIABLE: ESVN_STORE_DIR
36# @DESCRIPTION: 40# @DESCRIPTION:
37# 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
38[[ -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"
136# 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
137# restrict. 141# restrict.
138# export) 142# export)
139# don't export the working copy to S. 143# don't export the working copy to S.
140ESVN_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:-}"
141 151
142# @ECLASS-VARIABLE: ESVN_OFFLINE 152# @ECLASS-VARIABLE: ESVN_OFFLINE
143# @DESCRIPTION: 153# @DESCRIPTION:
144# 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
145# 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
184 # check for the protocol 194 # check for the protocol
185 local protocol="${repo_uri%%:*}" 195 local protocol="${repo_uri%%:*}"
186 196
187 case "${protocol}" in 197 case "${protocol}" in
188 http|https) 198 http|https)
189 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
190 built_with_use --missing false dev-util/subversion nowebdav; then
191 echo 200 echo
192 eerror "In order to emerge this package, you need to" 201 eerror "In order to emerge this package, you need to"
193 eerror "reinstall Subversion with support for WebDAV." 202 eerror "reinstall Subversion with support for WebDAV."
194 eerror "Subversion requires either Neon or Serf to support WebDAV." 203 eerror "Subversion requires either Neon or Serf to support WebDAV."
195 echo 204 echo
206 addread "/etc/subversion" 215 addread "/etc/subversion"
207 addwrite "${ESVN_STORE_DIR}" 216 addwrite "${ESVN_STORE_DIR}"
208 217
209 if [[ ! -d ${ESVN_STORE_DIR} ]]; then 218 if [[ ! -d ${ESVN_STORE_DIR} ]]; then
210 debug-print "${FUNCNAME}: initial checkout. creating subversion directory" 219 debug-print "${FUNCNAME}: initial checkout. creating subversion directory"
211 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}."
212 fi 221 fi
213 222
214 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}"
215 224
216 local wc_path="$(subversion__get_wc_path "${repo_uri}")" 225 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
217 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion" 226 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion"
218 227
219 [[ -n "${revision}" ]] && options="${options} -r ${revision}" 228 [[ -n "${revision}" ]] && options="${options} -r ${revision}"
221 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then 230 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then
222 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please" 231 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please"
223 ewarn "see \${ESVN_REPO_URI}" 232 ewarn "see \${ESVN_REPO_URI}"
224 fi 233 fi
225 234
226 if has_version ">=dev-util/subversion-1.6.0"; then 235 if has_version ">=dev-vcs/subversion-1.6.0"; then
227 options="${options} --config-option=config:auth:password-stores=" 236 options="${options} --config-option=config:auth:password-stores="
228 fi 237 fi
229 238
230 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\"" 239 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\""
231 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\"" 240 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\""
239 einfo "subversion check out start -->" 248 einfo "subversion check out start -->"
240 einfo " repository: ${repo_uri}${revision:+@}${revision}" 249 einfo " repository: ${repo_uri}${revision:+@}${revision}"
241 250
242 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}" 251 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}"
243 252
244 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}."
245 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}" 254 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}"
246 if [[ -n "${ESVN_USER}" ]]; then 255 if [[ -n "${ESVN_USER}" ]]; then
247 ${ESVN_FETCH_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}." 256 ${ESVN_FETCH_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
248 else 257 else
249 ${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}."
250 fi 259 fi
251 260
252 elif [[ -n ${ESVN_OFFLINE} ]]; then 261 elif [[ -n ${ESVN_OFFLINE} ]]; then
262 svn upgrade "${wc_path}" &>/dev/null
253 svn cleanup "${wc_path}" 263 svn cleanup "${wc_path}" &>/dev/null
254 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."
255 if [[ -n ${ESVN_REVISION} && ${ESVN_REVISION} != ${ESVN_WC_REVISION} ]]; then 265 if [[ -n ${ESVN_REVISION} && ${ESVN_REVISION} != ${ESVN_WC_REVISION} ]]; then
256 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."
257 fi 267 fi
258 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}."
259 else 269 else
270 svn upgrade "${wc_path}" &>/dev/null
260 svn cleanup "${wc_path}" 271 svn cleanup "${wc_path}" &>/dev/null
261 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."
262 273
263 local esvn_up_freq= 274 local esvn_up_freq=
264 if [[ -n ${ESVN_UP_FREQ} ]]; then 275 if [[ -n ${ESVN_UP_FREQ} ]]; then
265 if [[ -n ${ESVN_UP_FREQ//[[:digit:]]} ]]; then 276 if [[ -n ${ESVN_UP_FREQ//[[:digit:]]} ]]; then
270 esvn_up_freq=no_update 281 esvn_up_freq=no_update
271 fi 282 fi
272 fi 283 fi
273 284
274 if [[ -z ${esvn_up_freq} ]]; then 285 if [[ -z ${esvn_up_freq} ]]; then
286 if [[ ${ESVN_WC_UUID} != $(subversion__svn_info "${repo_uri}" "Repository UUID") ]]; then
287 # UUID mismatch. Delete working copy and check out it again.
288 einfo "subversion recheck out start -->"
289 einfo " old UUID: ${ESVN_WC_UUID}"
290 einfo " new UUID: $(subversion__svn_info "${repo_uri}" "Repository UUID")"
291 einfo " repository: ${repo_uri}${revision:+@}${revision}"
292
293 rm -fr "${ESVN_PROJECT}" || die
294
295 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}"
296
297 mkdir -m 775 -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}."
298 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}"
299 if [[ -n "${ESVN_USER}" ]]; then
300 ${ESVN_FETCH_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
301 else
302 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
303 fi
275 if [[ ${ESVN_WC_URL} != $(subversion__get_repository_uri "${repo_uri}") ]]; then 304 elif [[ ${ESVN_WC_URL} != $(subversion__get_repository_uri "${repo_uri}") ]]; then
276 einfo "subversion switch start -->" 305 einfo "subversion switch start -->"
277 einfo " old repository: ${ESVN_WC_URL}@${ESVN_WC_REVISION}" 306 einfo " old repository: ${ESVN_WC_URL}@${ESVN_WC_REVISION}"
278 einfo " new repository: ${repo_uri}${revision:+@}${revision}" 307 einfo " new repository: ${repo_uri}${revision:+@}${revision}"
279 308
280 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}" 309 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}"
314 #* "svn export" has a bug. see http://bugs.gentoo.org/119236 343 #* "svn export" has a bug. see http://bugs.gentoo.org/119236
315 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}." 344 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}."
316 rsync -rlpgo --exclude=".svn/" . "${S}" || die "${ESVN}: can't export to ${S}." 345 rsync -rlpgo --exclude=".svn/" . "${S}" || die "${ESVN}: can't export to ${S}."
317 fi 346 fi
318 347
348 popd > /dev/null
349
319 echo 350 echo
320} 351}
321 352
322# @FUNCTION: subversion_bootstrap 353# @FUNCTION: subversion_bootstrap
323# @DESCRIPTION: 354# @DESCRIPTION:
373# @FUNCTION: subversion_src_unpack 404# @FUNCTION: subversion_src_unpack
374# @DESCRIPTION: 405# @DESCRIPTION:
375# Default src_unpack. Fetch and, in older EAPIs, bootstrap. 406# Default src_unpack. Fetch and, in older EAPIs, bootstrap.
376subversion_src_unpack() { 407subversion_src_unpack() {
377 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch." 408 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch."
378 has src_prepare ${EXPORTED_FUNCTIONS} || git_src_prepare 409 if has "${EAPI:-0}" 0 1; then
410 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
411 fi
379} 412}
380 413
381# @FUNCTION: subversion_src_prepare 414# @FUNCTION: subversion_src_prepare
382# @DESCRIPTION: 415# @DESCRIPTION:
383# Default src_prepare. Bootstrap. 416# Default src_prepare. Bootstrap.

Legend:
Removed from v.1.65  
changed lines
  Added in v.1.72

  ViewVC Help
Powered by ViewVC 1.1.20