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

Diff of /eclass/subversion.eclass

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

Revision 1.67 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.67 2009/05/10 20:33:38 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
28 ;; 27 ;;
29esac 28esac
30 29
31DESCRIPTION="Based on the ${ECLASS} eclass" 30DESCRIPTION="Based on the ${ECLASS} eclass"
32 31
33SUBVERSION_DEPEND="dev-util/subversion 32SUBVERSION_DEPEND="dev-vcs/subversion
34 net-misc/rsync" 33 net-misc/rsync"
35 34
36if [[ -z "${ESVN_DISABLE_DEPENDENCIES}" ]]; then 35if [[ -z "${ESVN_DISABLE_DEPENDENCIES}" ]]; then
37 DEPEND="${SUBVERSION_DEPEND}" 36 DEPEND="${SUBVERSION_DEPEND}"
38fi 37fi
154# @DESCRIPTION: 153# @DESCRIPTION:
155# 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
156# 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
157# tree by users. 156# tree by users.
158ESVN_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}}"
159 168
160# @ECLASS-VARIABLE: ESVN_UP_FREQ 169# @ECLASS-VARIABLE: ESVN_UP_FREQ
161# @DESCRIPTION: 170# @DESCRIPTION:
162# 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
163# 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
195 # check for the protocol 204 # check for the protocol
196 local protocol="${repo_uri%%:*}" 205 local protocol="${repo_uri%%:*}"
197 206
198 case "${protocol}" in 207 case "${protocol}" in
199 http|https) 208 http|https)
200 if ! built_with_use -o dev-util/subversion webdav-neon webdav-serf; then 209 if ! built_with_use -o dev-vcs/subversion webdav-neon webdav-serf; then
201 echo 210 echo
202 eerror "In order to emerge this package, you need to" 211 eerror "In order to emerge this package, you need to"
203 eerror "reinstall Subversion with support for WebDAV." 212 eerror "reinstall Subversion with support for WebDAV."
204 eerror "Subversion requires either Neon or Serf to support WebDAV." 213 eerror "Subversion requires either Neon or Serf to support WebDAV."
205 echo 214 echo
214 esac 223 esac
215 224
216 addread "/etc/subversion" 225 addread "/etc/subversion"
217 addwrite "${ESVN_STORE_DIR}" 226 addwrite "${ESVN_STORE_DIR}"
218 227
228 if [[ -n "${ESVN_UMASK}" ]]; then
229 eumask_push "${ESVN_UMASK}"
230 fi
231
219 if [[ ! -d ${ESVN_STORE_DIR} ]]; then 232 if [[ ! -d ${ESVN_STORE_DIR} ]]; then
220 debug-print "${FUNCNAME}: initial checkout. creating subversion directory" 233 debug-print "${FUNCNAME}: initial checkout. creating subversion directory"
221 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}."
222 fi 235 fi
223 236
224 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}"
225 238
226 local wc_path="$(subversion__get_wc_path "${repo_uri}")" 239 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
227 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion" 240 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion"
228 241
229 [[ -n "${revision}" ]] && options="${options} -r ${revision}" 242 [[ -n "${revision}" ]] && options="${options} -r ${revision}"
231 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then 244 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then
232 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please" 245 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please"
233 ewarn "see \${ESVN_REPO_URI}" 246 ewarn "see \${ESVN_REPO_URI}"
234 fi 247 fi
235 248
236 if has_version ">=dev-util/subversion-1.6.0"; then 249 if has_version ">=dev-vcs/subversion-1.6.0"; then
237 options="${options} --config-option=config:auth:password-stores=" 250 options="${options} --config-option=config:auth:password-stores="
238 fi 251 fi
239 252
240 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\"" 253 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\""
241 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\"" 254 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\""
249 einfo "subversion check out start -->" 262 einfo "subversion check out start -->"
250 einfo " repository: ${repo_uri}${revision:+@}${revision}" 263 einfo " repository: ${repo_uri}${revision:+@}${revision}"
251 264
252 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}" 265 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}"
253 266
254 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}."
255 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}" 268 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}"
256 if [[ -n "${ESVN_USER}" ]]; then 269 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}." 270 ${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 271 else
259 ${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}."
282 esvn_up_freq=no_update 295 esvn_up_freq=no_update
283 fi 296 fi
284 fi 297 fi
285 298
286 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
287 if [[ ${ESVN_WC_URL} != $(subversion__get_repository_uri "${repo_uri}") ]]; then 318 elif [[ ${ESVN_WC_URL} != $(subversion__get_repository_uri "${repo_uri}") ]]; then
288 einfo "subversion switch start -->" 319 einfo "subversion switch start -->"
289 einfo " old repository: ${ESVN_WC_URL}@${ESVN_WC_REVISION}" 320 einfo " old repository: ${ESVN_WC_URL}@${ESVN_WC_REVISION}"
290 einfo " new repository: ${repo_uri}${revision:+@}${revision}" 321 einfo " new repository: ${repo_uri}${revision:+@}${revision}"
291 322
292 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}" 323 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}"
312 fi 343 fi
313 fi 344 fi
314 fi 345 fi
315 fi 346 fi
316 347
348 if [[ -n "${ESVN_UMASK}" ]]; then
349 eumask_pop
350 fi
351
317 einfo " working copy: ${wc_path}" 352 einfo " working copy: ${wc_path}"
318 353
319 if ! has "export" ${ESVN_RESTRICT}; then 354 if ! has "export" ${ESVN_RESTRICT}; then
320 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}" 355 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
321 356
325 # export to the ${WORKDIR} 360 # export to the ${WORKDIR}
326 #* "svn export" has a bug. see http://bugs.gentoo.org/119236 361 #* "svn export" has a bug. see http://bugs.gentoo.org/119236
327 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}." 362 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}."
328 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}."
329 fi 364 fi
365
366 popd > /dev/null
330 367
331 echo 368 echo
332} 369}
333 370
334# @FUNCTION: subversion_bootstrap 371# @FUNCTION: subversion_bootstrap
434# 471#
435subversion__svn_info() { 472subversion__svn_info() {
436 local target="${1}" 473 local target="${1}"
437 local key="${2}" 474 local key="${2}"
438 475
476 env LC_ALL=C svn info \
477 ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" \
439 env LC_ALL=C svn info "${target}" | grep -i "^${key}" | cut -d" " -f2- 478 "${target}" | grep -i "^${key}" | cut -d" " -f2-
440} 479}
441 480
442## -- subversion__get_repository_uri() --------------------------------------- # 481## -- subversion__get_repository_uri() --------------------------------------- #
443# 482#
444# param $1 - a repository URI. 483# param $1 - a repository URI.

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

  ViewVC Help
Powered by ViewVC 1.1.20