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

Diff of /eclass/subversion.eclass

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

Revision 1.64 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.64 2009/04/26 02:33:36 arfrever 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
22if has "${EAPI}" 0 1; then 21case "${EAPI:-0}" in
22 0|1)
23 EXPORT_FUNCTIONS src_unpack pkg_preinst
24 ;;
25 *)
23 EXPORT_FUNCTIONS src_unpack src_prepare pkg_preinst 26 EXPORT_FUNCTIONS src_unpack src_prepare pkg_preinst
24else 27 ;;
25 EXPORT_FUNCTIONS src_unpack pkg_preinst 28esac
29
30DESCRIPTION="Based on the ${ECLASS} eclass"
31
32SUBVERSION_DEPEND="dev-vcs/subversion
33 net-misc/rsync"
34
35if [[ -z "${ESVN_DISABLE_DEPENDENCIES}" ]]; then
36 DEPEND="${SUBVERSION_DEPEND}"
26fi 37fi
27
28DESCRIPTION="Based on the ${ECLASS} eclass"
29
30DEPEND="dev-util/subversion
31 net-misc/rsync"
32 38
33# @ECLASS-VARIABLE: ESVN_STORE_DIR 39# @ECLASS-VARIABLE: ESVN_STORE_DIR
34# @DESCRIPTION: 40# @DESCRIPTION:
35# 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
36[[ -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"
135# restrict. 141# restrict.
136# export) 142# export)
137# don't export the working copy to S. 143# don't export the working copy to S.
138ESVN_RESTRICT="${ESVN_RESTRICT:-}" 144ESVN_RESTRICT="${ESVN_RESTRICT:-}"
139 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
140# @ECLASS-VARIABLE: ESVN_OFFLINE 152# @ECLASS-VARIABLE: ESVN_OFFLINE
141# @DESCRIPTION: 153# @DESCRIPTION:
142# 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
143# 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
144# tree by users. 156# tree by users.
145ESVN_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}}"
146 168
147# @ECLASS-VARIABLE: ESVN_UP_FREQ 169# @ECLASS-VARIABLE: ESVN_UP_FREQ
148# @DESCRIPTION: 170# @DESCRIPTION:
149# 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
150# 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
182 # check for the protocol 204 # check for the protocol
183 local protocol="${repo_uri%%:*}" 205 local protocol="${repo_uri%%:*}"
184 206
185 case "${protocol}" in 207 case "${protocol}" in
186 http|https) 208 http|https)
187 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
188 built_with_use --missing false dev-util/subversion nowebdav; then
189 echo 210 echo
190 eerror "In order to emerge this package, you need to" 211 eerror "In order to emerge this package, you need to"
191 eerror "reinstall Subversion with support for WebDAV." 212 eerror "reinstall Subversion with support for WebDAV."
192 eerror "Subversion requires either Neon or Serf to support WebDAV." 213 eerror "Subversion requires either Neon or Serf to support WebDAV."
193 echo 214 echo
202 esac 223 esac
203 224
204 addread "/etc/subversion" 225 addread "/etc/subversion"
205 addwrite "${ESVN_STORE_DIR}" 226 addwrite "${ESVN_STORE_DIR}"
206 227
228 if [[ -n "${ESVN_UMASK}" ]]; then
229 eumask_push "${ESVN_UMASK}"
230 fi
231
207 if [[ ! -d ${ESVN_STORE_DIR} ]]; then 232 if [[ ! -d ${ESVN_STORE_DIR} ]]; then
208 debug-print "${FUNCNAME}: initial checkout. creating subversion directory" 233 debug-print "${FUNCNAME}: initial checkout. creating subversion directory"
209 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}."
210 fi 235 fi
211 236
212 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}"
213 238
214 local wc_path="$(subversion__get_wc_path "${repo_uri}")" 239 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
215 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion" 240 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion"
216 241
217 [[ -n "${revision}" ]] && options="${options} -r ${revision}" 242 [[ -n "${revision}" ]] && options="${options} -r ${revision}"
219 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then 244 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then
220 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please" 245 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please"
221 ewarn "see \${ESVN_REPO_URI}" 246 ewarn "see \${ESVN_REPO_URI}"
222 fi 247 fi
223 248
224 if has_version ">=dev-util/subversion-1.6.0"; then 249 if has_version ">=dev-vcs/subversion-1.6.0"; then
225 options="${options} --config-option=config:auth:password-stores=" 250 options="${options} --config-option=config:auth:password-stores="
226 fi 251 fi
227 252
228 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\"" 253 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\""
229 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\"" 254 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\""
237 einfo "subversion check out start -->" 262 einfo "subversion check out start -->"
238 einfo " repository: ${repo_uri}${revision:+@}${revision}" 263 einfo " repository: ${repo_uri}${revision:+@}${revision}"
239 264
240 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}" 265 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}"
241 266
242 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}."
243 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}" 268 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}"
244 if [[ -n "${ESVN_USER}" ]]; then 269 if [[ -n "${ESVN_USER}" ]]; then
245 ${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}."
246 else 271 else
247 ${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}."
248 fi 273 fi
249 274
250 elif [[ -n ${ESVN_OFFLINE} ]]; then 275 elif [[ -n ${ESVN_OFFLINE} ]]; then
276 svn upgrade "${wc_path}" &>/dev/null
251 svn cleanup "${wc_path}" 277 svn cleanup "${wc_path}" &>/dev/null
252 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."
253 if [[ -n ${ESVN_REVISION} && ${ESVN_REVISION} != ${ESVN_WC_REVISION} ]]; then 279 if [[ -n ${ESVN_REVISION} && ${ESVN_REVISION} != ${ESVN_WC_REVISION} ]]; then
254 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."
255 fi 281 fi
256 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}."
257 else 283 else
284 svn upgrade "${wc_path}" &>/dev/null
258 svn cleanup "${wc_path}" 285 svn cleanup "${wc_path}" &>/dev/null
259 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."
260 287
261 local esvn_up_freq= 288 local esvn_up_freq=
262 if [[ -n ${ESVN_UP_FREQ} ]]; then 289 if [[ -n ${ESVN_UP_FREQ} ]]; then
263 if [[ -n ${ESVN_UP_FREQ//[[:digit:]]} ]]; then 290 if [[ -n ${ESVN_UP_FREQ//[[:digit:]]} ]]; then
268 esvn_up_freq=no_update 295 esvn_up_freq=no_update
269 fi 296 fi
270 fi 297 fi
271 298
272 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
273 if [[ ${ESVN_WC_URL} != $(subversion__get_repository_uri "${repo_uri}") ]]; then 318 elif [[ ${ESVN_WC_URL} != $(subversion__get_repository_uri "${repo_uri}") ]]; then
274 einfo "subversion switch start -->" 319 einfo "subversion switch start -->"
275 einfo " old repository: ${ESVN_WC_URL}@${ESVN_WC_REVISION}" 320 einfo " old repository: ${ESVN_WC_URL}@${ESVN_WC_REVISION}"
276 einfo " new repository: ${repo_uri}${revision:+@}${revision}" 321 einfo " new repository: ${repo_uri}${revision:+@}${revision}"
277 322
278 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}" 323 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}"
298 fi 343 fi
299 fi 344 fi
300 fi 345 fi
301 fi 346 fi
302 347
348 if [[ -n "${ESVN_UMASK}" ]]; then
349 eumask_pop
350 fi
351
303 einfo " working copy: ${wc_path}" 352 einfo " working copy: ${wc_path}"
304 353
305 if ! has "export" ${ESVN_RESTRICT}; then 354 if ! has "export" ${ESVN_RESTRICT}; then
306 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}" 355 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
307 356
312 #* "svn export" has a bug. see http://bugs.gentoo.org/119236 361 #* "svn export" has a bug. see http://bugs.gentoo.org/119236
313 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}." 362 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}."
314 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}."
315 fi 364 fi
316 365
366 popd > /dev/null
367
317 echo 368 echo
318} 369}
319 370
320# @FUNCTION: subversion_bootstrap 371# @FUNCTION: subversion_bootstrap
321# @DESCRIPTION: 372# @DESCRIPTION:
371# @FUNCTION: subversion_src_unpack 422# @FUNCTION: subversion_src_unpack
372# @DESCRIPTION: 423# @DESCRIPTION:
373# Default src_unpack. Fetch and, in older EAPIs, bootstrap. 424# Default src_unpack. Fetch and, in older EAPIs, bootstrap.
374subversion_src_unpack() { 425subversion_src_unpack() {
375 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch." 426 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch."
376 if has "${EAPI}" 0 1; then 427 if has "${EAPI:-0}" 0 1; then
377 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap." 428 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
378 fi 429 fi
379} 430}
380 431
381# @FUNCTION: subversion_src_prepare 432# @FUNCTION: subversion_src_prepare
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.64  
changed lines
  Added in v.1.75

  ViewVC Help
Powered by ViewVC 1.1.20