/[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.73
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.73 2012/02/02 03:17:56 floppym 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 custom umask.
162# This is intended to be set by users.
163ESVN_UMASK="${ESVN_UMASK:-${EVCS_UMASK}}"
148 164
149# @ECLASS-VARIABLE: ESVN_UP_FREQ 165# @ECLASS-VARIABLE: ESVN_UP_FREQ
150# @DESCRIPTION: 166# @DESCRIPTION:
151# Set the minimum number of hours between svn up'ing in any given svn module. This is particularly 167# 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 168# useful for split KDE ebuilds where we want to ensure that all submodules are compiled for the same
184 # check for the protocol 200 # check for the protocol
185 local protocol="${repo_uri%%:*}" 201 local protocol="${repo_uri%%:*}"
186 202
187 case "${protocol}" in 203 case "${protocol}" in
188 http|https) 204 http|https)
189 if ! built_with_use --missing true -o dev-util/subversion webdav-neon webdav-serf || \ 205 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 206 echo
192 eerror "In order to emerge this package, you need to" 207 eerror "In order to emerge this package, you need to"
193 eerror "reinstall Subversion with support for WebDAV." 208 eerror "reinstall Subversion with support for WebDAV."
194 eerror "Subversion requires either Neon or Serf to support WebDAV." 209 eerror "Subversion requires either Neon or Serf to support WebDAV."
195 echo 210 echo
204 esac 219 esac
205 220
206 addread "/etc/subversion" 221 addread "/etc/subversion"
207 addwrite "${ESVN_STORE_DIR}" 222 addwrite "${ESVN_STORE_DIR}"
208 223
224 if [[ -n "${ESVN_UMASK}" ]]; then
225 eumask_push "${ESVN_UMASK}"
226 fi
227
209 if [[ ! -d ${ESVN_STORE_DIR} ]]; then 228 if [[ ! -d ${ESVN_STORE_DIR} ]]; then
210 debug-print "${FUNCNAME}: initial checkout. creating subversion directory" 229 debug-print "${FUNCNAME}: initial checkout. creating subversion directory"
211 mkdir -p "${ESVN_STORE_DIR}" || die "${ESVN}: can't mkdir ${ESVN_STORE_DIR}." 230 mkdir -m 775 -p "${ESVN_STORE_DIR}" || die "${ESVN}: can't mkdir ${ESVN_STORE_DIR}."
212 fi 231 fi
213 232
214 cd "${ESVN_STORE_DIR}" || die "${ESVN}: can't chdir to ${ESVN_STORE_DIR}" 233 pushd "${ESVN_STORE_DIR}" > /dev/null || die "${ESVN}: can't chdir to ${ESVN_STORE_DIR}"
215 234
216 local wc_path="$(subversion__get_wc_path "${repo_uri}")" 235 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
217 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion" 236 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion"
218 237
219 [[ -n "${revision}" ]] && options="${options} -r ${revision}" 238 [[ -n "${revision}" ]] && options="${options} -r ${revision}"
221 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then 240 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then
222 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please" 241 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please"
223 ewarn "see \${ESVN_REPO_URI}" 242 ewarn "see \${ESVN_REPO_URI}"
224 fi 243 fi
225 244
226 if has_version ">=dev-util/subversion-1.6.0"; then 245 if has_version ">=dev-vcs/subversion-1.6.0"; then
227 options="${options} --config-option=config:auth:password-stores=" 246 options="${options} --config-option=config:auth:password-stores="
228 fi 247 fi
229 248
230 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\"" 249 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\""
231 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\"" 250 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\""
239 einfo "subversion check out start -->" 258 einfo "subversion check out start -->"
240 einfo " repository: ${repo_uri}${revision:+@}${revision}" 259 einfo " repository: ${repo_uri}${revision:+@}${revision}"
241 260
242 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}" 261 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}"
243 262
244 mkdir -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}." 263 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}" 264 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}"
246 if [[ -n "${ESVN_USER}" ]]; then 265 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}." 266 ${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 267 else
249 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}." 268 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
250 fi 269 fi
251 270
252 elif [[ -n ${ESVN_OFFLINE} ]]; then 271 elif [[ -n ${ESVN_OFFLINE} ]]; then
272 svn upgrade "${wc_path}" &>/dev/null
253 svn cleanup "${wc_path}" 273 svn cleanup "${wc_path}" &>/dev/null
254 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy." 274 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 275 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." 276 die "${ESVN}: You requested off-line updating and revision ${ESVN_REVISION} but only revision ${ESVN_WC_REVISION} is available locally."
257 fi 277 fi
258 einfo "Fetching disabled: Using existing repository copy at revision ${ESVN_WC_REVISION}." 278 einfo "Fetching disabled: Using existing repository copy at revision ${ESVN_WC_REVISION}."
259 else 279 else
280 svn upgrade "${wc_path}" &>/dev/null
260 svn cleanup "${wc_path}" 281 svn cleanup "${wc_path}" &>/dev/null
261 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy." 282 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy."
262 283
263 local esvn_up_freq= 284 local esvn_up_freq=
264 if [[ -n ${ESVN_UP_FREQ} ]]; then 285 if [[ -n ${ESVN_UP_FREQ} ]]; then
265 if [[ -n ${ESVN_UP_FREQ//[[:digit:]]} ]]; then 286 if [[ -n ${ESVN_UP_FREQ//[[:digit:]]} ]]; then
270 esvn_up_freq=no_update 291 esvn_up_freq=no_update
271 fi 292 fi
272 fi 293 fi
273 294
274 if [[ -z ${esvn_up_freq} ]]; then 295 if [[ -z ${esvn_up_freq} ]]; then
296 if [[ ${ESVN_WC_UUID} != $(subversion__svn_info "${repo_uri}" "Repository UUID") ]]; then
297 # UUID mismatch. Delete working copy and check out it again.
298 einfo "subversion recheck out start -->"
299 einfo " old UUID: ${ESVN_WC_UUID}"
300 einfo " new UUID: $(subversion__svn_info "${repo_uri}" "Repository UUID")"
301 einfo " repository: ${repo_uri}${revision:+@}${revision}"
302
303 rm -fr "${ESVN_PROJECT}" || die
304
305 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}"
306
307 mkdir -m 775 -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}."
308 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}"
309 if [[ -n "${ESVN_USER}" ]]; then
310 ${ESVN_FETCH_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
311 else
312 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
313 fi
275 if [[ ${ESVN_WC_URL} != $(subversion__get_repository_uri "${repo_uri}") ]]; then 314 elif [[ ${ESVN_WC_URL} != $(subversion__get_repository_uri "${repo_uri}") ]]; then
276 einfo "subversion switch start -->" 315 einfo "subversion switch start -->"
277 einfo " old repository: ${ESVN_WC_URL}@${ESVN_WC_REVISION}" 316 einfo " old repository: ${ESVN_WC_URL}@${ESVN_WC_REVISION}"
278 einfo " new repository: ${repo_uri}${revision:+@}${revision}" 317 einfo " new repository: ${repo_uri}${revision:+@}${revision}"
279 318
280 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}" 319 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}"
300 fi 339 fi
301 fi 340 fi
302 fi 341 fi
303 fi 342 fi
304 343
344 if [[ -n "${ESVN_UMASK}" ]]; then
345 eumask_pop
346 fi
347
305 einfo " working copy: ${wc_path}" 348 einfo " working copy: ${wc_path}"
306 349
307 if ! has "export" ${ESVN_RESTRICT}; then 350 if ! has "export" ${ESVN_RESTRICT}; then
308 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}" 351 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
309 352
314 #* "svn export" has a bug. see http://bugs.gentoo.org/119236 357 #* "svn export" has a bug. see http://bugs.gentoo.org/119236
315 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}." 358 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}."
316 rsync -rlpgo --exclude=".svn/" . "${S}" || die "${ESVN}: can't export to ${S}." 359 rsync -rlpgo --exclude=".svn/" . "${S}" || die "${ESVN}: can't export to ${S}."
317 fi 360 fi
318 361
362 popd > /dev/null
363
319 echo 364 echo
320} 365}
321 366
322# @FUNCTION: subversion_bootstrap 367# @FUNCTION: subversion_bootstrap
323# @DESCRIPTION: 368# @DESCRIPTION:
373# @FUNCTION: subversion_src_unpack 418# @FUNCTION: subversion_src_unpack
374# @DESCRIPTION: 419# @DESCRIPTION:
375# Default src_unpack. Fetch and, in older EAPIs, bootstrap. 420# Default src_unpack. Fetch and, in older EAPIs, bootstrap.
376subversion_src_unpack() { 421subversion_src_unpack() {
377 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch." 422 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch."
378 has src_prepare ${EXPORTED_FUNCTIONS} || git_src_prepare 423 if has "${EAPI:-0}" 0 1; then
424 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
425 fi
379} 426}
380 427
381# @FUNCTION: subversion_src_prepare 428# @FUNCTION: subversion_src_prepare
382# @DESCRIPTION: 429# @DESCRIPTION:
383# Default src_prepare. Bootstrap. 430# Default src_prepare. Bootstrap.

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

  ViewVC Help
Powered by ViewVC 1.1.20