/[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.75
1# Copyright 1999-2009 Gentoo Foundation 1# Copyright 1999-2012 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.75 2012/02/21 18:03:49 jlec 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"
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:-}"
141 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:-}"
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
146# tree by users. 156# tree by users.
147ESVN_OFFLINE="${ESVN_OFFLINE:-${ESCM_OFFLINE}}" 157ESVN_OFFLINE="${ESVN_OFFLINE:-${ESCM_OFFLINE}}"
158
159# @ECLASS-VARIABLE: ESVN_UMASK
160# @DESCRIPTION:
161# Set this variable to a custom umask. This is intended to be set by users.
162# By setting this to something like 002, it can make life easier for people
163# who do development as non-root (but are in the portage group), and then
164# switch over to building with FEATURES=userpriv. Or vice-versa. Shouldn't
165# be a security issue here as anyone who has portage group write access
166# already can screw the system over in more creative ways.
167ESVN_UMASK="${ESVN_UMASK:-${EVCS_UMASK}}"
148 168
149# @ECLASS-VARIABLE: ESVN_UP_FREQ 169# @ECLASS-VARIABLE: ESVN_UP_FREQ
150# @DESCRIPTION: 170# @DESCRIPTION:
151# Set the minimum number of hours between svn up'ing in any given svn module. This is particularly 171# Set the minimum number of hours between svn up'ing in any given svn module. This is particularly
152# useful for split KDE ebuilds where we want to ensure that all submodules are compiled for the same 172# useful for split KDE ebuilds where we want to ensure that all submodules are compiled for the same
184 # check for the protocol 204 # check for the protocol
185 local protocol="${repo_uri%%:*}" 205 local protocol="${repo_uri%%:*}"
186 206
187 case "${protocol}" in 207 case "${protocol}" in
188 http|https) 208 http|https)
189 if ! built_with_use --missing true -o dev-util/subversion webdav-neon webdav-serf || \ 209 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 210 echo
192 eerror "In order to emerge this package, you need to" 211 eerror "In order to emerge this package, you need to"
193 eerror "reinstall Subversion with support for WebDAV." 212 eerror "reinstall Subversion with support for WebDAV."
194 eerror "Subversion requires either Neon or Serf to support WebDAV." 213 eerror "Subversion requires either Neon or Serf to support WebDAV."
195 echo 214 echo
204 esac 223 esac
205 224
206 addread "/etc/subversion" 225 addread "/etc/subversion"
207 addwrite "${ESVN_STORE_DIR}" 226 addwrite "${ESVN_STORE_DIR}"
208 227
228 if [[ -n "${ESVN_UMASK}" ]]; then
229 eumask_push "${ESVN_UMASK}"
230 fi
231
209 if [[ ! -d ${ESVN_STORE_DIR} ]]; then 232 if [[ ! -d ${ESVN_STORE_DIR} ]]; then
210 debug-print "${FUNCNAME}: initial checkout. creating subversion directory" 233 debug-print "${FUNCNAME}: initial checkout. creating subversion directory"
211 mkdir -p "${ESVN_STORE_DIR}" || die "${ESVN}: can't mkdir ${ESVN_STORE_DIR}." 234 mkdir -m 775 -p "${ESVN_STORE_DIR}" || die "${ESVN}: can't mkdir ${ESVN_STORE_DIR}."
212 fi 235 fi
213 236
214 cd "${ESVN_STORE_DIR}" || die "${ESVN}: can't chdir to ${ESVN_STORE_DIR}" 237 pushd "${ESVN_STORE_DIR}" > /dev/null || die "${ESVN}: can't chdir to ${ESVN_STORE_DIR}"
215 238
216 local wc_path="$(subversion__get_wc_path "${repo_uri}")" 239 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
217 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion" 240 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion"
218 241
219 [[ -n "${revision}" ]] && options="${options} -r ${revision}" 242 [[ -n "${revision}" ]] && options="${options} -r ${revision}"
221 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then 244 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then
222 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please" 245 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please"
223 ewarn "see \${ESVN_REPO_URI}" 246 ewarn "see \${ESVN_REPO_URI}"
224 fi 247 fi
225 248
226 if has_version ">=dev-util/subversion-1.6.0"; then 249 if has_version ">=dev-vcs/subversion-1.6.0"; then
227 options="${options} --config-option=config:auth:password-stores=" 250 options="${options} --config-option=config:auth:password-stores="
228 fi 251 fi
229 252
230 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\"" 253 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\""
231 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\"" 254 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\""
239 einfo "subversion check out start -->" 262 einfo "subversion check out start -->"
240 einfo " repository: ${repo_uri}${revision:+@}${revision}" 263 einfo " repository: ${repo_uri}${revision:+@}${revision}"
241 264
242 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}" 265 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}"
243 266
244 mkdir -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}." 267 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}" 268 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}"
246 if [[ -n "${ESVN_USER}" ]]; then 269 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}." 270 ${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 271 else
249 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}." 272 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
250 fi 273 fi
251 274
252 elif [[ -n ${ESVN_OFFLINE} ]]; then 275 elif [[ -n ${ESVN_OFFLINE} ]]; then
276 svn upgrade "${wc_path}" &>/dev/null
253 svn cleanup "${wc_path}" 277 svn cleanup "${wc_path}" &>/dev/null
254 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy." 278 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 279 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." 280 die "${ESVN}: You requested off-line updating and revision ${ESVN_REVISION} but only revision ${ESVN_WC_REVISION} is available locally."
257 fi 281 fi
258 einfo "Fetching disabled: Using existing repository copy at revision ${ESVN_WC_REVISION}." 282 einfo "Fetching disabled: Using existing repository copy at revision ${ESVN_WC_REVISION}."
259 else 283 else
284 svn upgrade "${wc_path}" &>/dev/null
260 svn cleanup "${wc_path}" 285 svn cleanup "${wc_path}" &>/dev/null
261 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy." 286 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy."
262 287
263 local esvn_up_freq= 288 local esvn_up_freq=
264 if [[ -n ${ESVN_UP_FREQ} ]]; then 289 if [[ -n ${ESVN_UP_FREQ} ]]; then
265 if [[ -n ${ESVN_UP_FREQ//[[:digit:]]} ]]; then 290 if [[ -n ${ESVN_UP_FREQ//[[:digit:]]} ]]; then
270 esvn_up_freq=no_update 295 esvn_up_freq=no_update
271 fi 296 fi
272 fi 297 fi
273 298
274 if [[ -z ${esvn_up_freq} ]]; then 299 if [[ -z ${esvn_up_freq} ]]; then
300 if [[ ${ESVN_WC_UUID} != $(subversion__svn_info "${repo_uri}" "Repository UUID") ]]; then
301 # UUID mismatch. Delete working copy and check out it again.
302 einfo "subversion recheck out start -->"
303 einfo " old UUID: ${ESVN_WC_UUID}"
304 einfo " new UUID: $(subversion__svn_info "${repo_uri}" "Repository UUID")"
305 einfo " repository: ${repo_uri}${revision:+@}${revision}"
306
307 rm -fr "${ESVN_PROJECT}" || die
308
309 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}"
310
311 mkdir -m 775 -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}."
312 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}"
313 if [[ -n "${ESVN_USER}" ]]; then
314 ${ESVN_FETCH_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
315 else
316 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
317 fi
275 if [[ ${ESVN_WC_URL} != $(subversion__get_repository_uri "${repo_uri}") ]]; then 318 elif [[ ${ESVN_WC_URL} != $(subversion__get_repository_uri "${repo_uri}") ]]; then
276 einfo "subversion switch start -->" 319 einfo "subversion switch start -->"
277 einfo " old repository: ${ESVN_WC_URL}@${ESVN_WC_REVISION}" 320 einfo " old repository: ${ESVN_WC_URL}@${ESVN_WC_REVISION}"
278 einfo " new repository: ${repo_uri}${revision:+@}${revision}" 321 einfo " new repository: ${repo_uri}${revision:+@}${revision}"
279 322
280 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}" 323 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}"
300 fi 343 fi
301 fi 344 fi
302 fi 345 fi
303 fi 346 fi
304 347
348 if [[ -n "${ESVN_UMASK}" ]]; then
349 eumask_pop
350 fi
351
305 einfo " working copy: ${wc_path}" 352 einfo " working copy: ${wc_path}"
306 353
307 if ! has "export" ${ESVN_RESTRICT}; then 354 if ! has "export" ${ESVN_RESTRICT}; then
308 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}" 355 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
309 356
314 #* "svn export" has a bug. see http://bugs.gentoo.org/119236 361 #* "svn export" has a bug. see http://bugs.gentoo.org/119236
315 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}." 362 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}."
316 rsync -rlpgo --exclude=".svn/" . "${S}" || die "${ESVN}: can't export to ${S}." 363 rsync -rlpgo --exclude=".svn/" . "${S}" || die "${ESVN}: can't export to ${S}."
317 fi 364 fi
318 365
366 popd > /dev/null
367
319 echo 368 echo
320} 369}
321 370
322# @FUNCTION: subversion_bootstrap 371# @FUNCTION: subversion_bootstrap
323# @DESCRIPTION: 372# @DESCRIPTION:
373# @FUNCTION: subversion_src_unpack 422# @FUNCTION: subversion_src_unpack
374# @DESCRIPTION: 423# @DESCRIPTION:
375# Default src_unpack. Fetch and, in older EAPIs, bootstrap. 424# Default src_unpack. Fetch and, in older EAPIs, bootstrap.
376subversion_src_unpack() { 425subversion_src_unpack() {
377 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch." 426 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch."
378 has src_prepare ${EXPORTED_FUNCTIONS} || git_src_prepare 427 if has "${EAPI:-0}" 0 1; then
428 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
429 fi
379} 430}
380 431
381# @FUNCTION: subversion_src_prepare 432# @FUNCTION: subversion_src_prepare
382# @DESCRIPTION: 433# @DESCRIPTION:
383# Default src_prepare. Bootstrap. 434# Default src_prepare. Bootstrap.
420# 471#
421subversion__svn_info() { 472subversion__svn_info() {
422 local target="${1}" 473 local target="${1}"
423 local key="${2}" 474 local key="${2}"
424 475
476 env LC_ALL=C svn info \
477 ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" \
425 env LC_ALL=C svn info "${target}" | grep -i "^${key}" | cut -d" " -f2- 478 "${target}" | grep -i "^${key}" | cut -d" " -f2-
426} 479}
427 480
428## -- subversion__get_repository_uri() --------------------------------------- # 481## -- subversion__get_repository_uri() --------------------------------------- #
429# 482#
430# param $1 - a repository URI. 483# param $1 - a repository URI.

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

  ViewVC Help
Powered by ViewVC 1.1.20