/[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.84
1# Copyright 1999-2009 Gentoo Foundation 1# Copyright 1999-2013 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.84 2013/04/28 16:15:33 zmedico 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# @AUTHOR:
9# Arfrever Frehtes Taifersar Arahesis <arfrever@gentoo.org>
10#
11# Original Author: Akinori Hattori <hattya@gentoo.org> 9# Original Author: Akinori Hattori <hattya@gentoo.org>
12#
13# @BLURB: The subversion eclass is written to fetch software sources from subversion repositories 10# @BLURB: The subversion eclass is written to fetch software sources from subversion repositories
14# @DESCRIPTION: 11# @DESCRIPTION:
15# The subversion eclass provides functions to fetch, patch and bootstrap 12# The subversion eclass provides functions to fetch, patch and bootstrap
16# software sources from subversion repositories. 13# software sources from subversion repositories.
17 14
18inherit eutils 15inherit eutils
19 16
20ESVN="${ECLASS}" 17ESVN="${ECLASS}"
21 18
22EXPORTED_FUNCTIONS="src_unpack pkg_preinst"
23case "${EAPI:-0}" in 19case "${EAPI:-0}" in
24 2) EXPORTED_FUNCTIONS="${EXPORTED_FUNCTIONS} src_prepare" ;; 20 0|1)
25 1|0) ;; 21 EXPORT_FUNCTIONS src_unpack pkg_preinst
26 *) die "Unknown EAPI, Bug eclass maintainers." ;; 22 DEPEND="dev-vcs/subversion"
23 ;;
24 *)
25 EXPORT_FUNCTIONS src_unpack src_prepare pkg_preinst
26 DEPEND="|| ( dev-vcs/subversion[webdav-neon] dev-vcs/subversion[webdav-serf] )"
27 ;;
27esac 28esac
28EXPORT_FUNCTIONS ${EXPORTED_FUNCTIONS}
29 29
30DESCRIPTION="Based on the ${ECLASS} eclass" 30DEPEND+=" net-misc/rsync"
31
32DEPEND="dev-util/subversion
33 net-misc/rsync"
34 31
35# @ECLASS-VARIABLE: ESVN_STORE_DIR 32# @ECLASS-VARIABLE: ESVN_STORE_DIR
36# @DESCRIPTION: 33# @DESCRIPTION:
37# subversion sources store directory. Users may override this in /etc/make.conf 34# subversion sources store directory. Users may override this in /etc/portage/make.conf
38[[ -z ${ESVN_STORE_DIR} ]] && ESVN_STORE_DIR="${PORTAGE_ACTUAL_DISTDIR:-${DISTDIR}}/svn-src" 35[[ -z ${ESVN_STORE_DIR} ]] && ESVN_STORE_DIR="${PORTAGE_ACTUAL_DISTDIR:-${DISTDIR}}/svn-src"
39 36
40# @ECLASS-VARIABLE: ESVN_FETCH_CMD 37# @ECLASS-VARIABLE: ESVN_FETCH_CMD
41# @DESCRIPTION: 38# @DESCRIPTION:
42# subversion checkout command 39# subversion checkout command
62# @DESCRIPTION: 59# @DESCRIPTION:
63# repository uri 60# repository uri
64# 61#
65# e.g. http://foo/trunk, svn://bar/trunk, svn://bar/branch/foo@1234 62# e.g. http://foo/trunk, svn://bar/trunk, svn://bar/branch/foo@1234
66# 63#
67# supported protocols: 64# supported URI schemes:
68# http:// 65# http://
69# https:// 66# https://
70# svn:// 67# svn://
71# svn+ssh:// 68# svn+ssh://
69# file://
72# 70#
73# to peg to a specific revision, append @REV to the repo's uri 71# to peg to a specific revision, append @REV to the repo's uri
74ESVN_REPO_URI="${ESVN_REPO_URI:-}" 72ESVN_REPO_URI="${ESVN_REPO_URI:-}"
75 73
76# @ECLASS-VARIABLE: ESVN_REVISION 74# @ECLASS-VARIABLE: ESVN_REVISION
142# @ECLASS-VARIABLE: ESVN_OFFLINE 140# @ECLASS-VARIABLE: ESVN_OFFLINE
143# @DESCRIPTION: 141# @DESCRIPTION:
144# Set this variable to a non-empty value to disable the automatic updating of 142# 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 143# an svn source tree. This is intended to be set outside the subversion source
146# tree by users. 144# tree by users.
147ESVN_OFFLINE="${ESVN_OFFLINE:-${ESCM_OFFLINE}}" 145ESVN_OFFLINE="${ESVN_OFFLINE:-${EVCS_OFFLINE}}"
146
147# @ECLASS-VARIABLE: ESVN_UMASK
148# @DESCRIPTION:
149# Set this variable to a custom umask. This is intended to be set by users.
150# By setting this to something like 002, it can make life easier for people
151# who do development as non-root (but are in the portage group), and then
152# switch over to building with FEATURES=userpriv. Or vice-versa. Shouldn't
153# be a security issue here as anyone who has portage group write access
154# already can screw the system over in more creative ways.
155ESVN_UMASK="${ESVN_UMASK:-${EVCS_UMASK}}"
148 156
149# @ECLASS-VARIABLE: ESVN_UP_FREQ 157# @ECLASS-VARIABLE: ESVN_UP_FREQ
150# @DESCRIPTION: 158# @DESCRIPTION:
151# Set the minimum number of hours between svn up'ing in any given svn module. This is particularly 159# 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 160# useful for split KDE ebuilds where we want to ensure that all submodules are compiled for the same
179 die "${ESVN}: ESVN_REPO_URI (or specified URI) is empty." 187 die "${ESVN}: ESVN_REPO_URI (or specified URI) is empty."
180 fi 188 fi
181 189
182 [[ -n "${ESVN_REVISION}" ]] && revision="${ESVN_REVISION}" 190 [[ -n "${ESVN_REVISION}" ]] && revision="${ESVN_REVISION}"
183 191
184 # check for the protocol 192 # check for the scheme
185 local protocol="${repo_uri%%:*}" 193 local scheme="${repo_uri%%:*}"
186 194 case "${scheme}" in
187 case "${protocol}" in
188 http|https) 195 http|https)
189 if ! built_with_use --missing true -o dev-util/subversion webdav-neon webdav-serf || \
190 built_with_use --missing false dev-util/subversion nowebdav; then
191 echo
192 eerror "In order to emerge this package, you need to"
193 eerror "reinstall Subversion with support for WebDAV."
194 eerror "Subversion requires either Neon or Serf to support WebDAV."
195 echo
196 die "${ESVN}: reinstall Subversion with support for WebDAV."
197 fi
198 ;; 196 ;;
199 svn|svn+ssh) 197 svn|svn+ssh)
200 ;; 198 ;;
199 file)
200 ;;
201 *) 201 *)
202 die "${ESVN}: fetch from '${protocol}' is not yet implemented." 202 die "${ESVN}: fetch from '${scheme}' is not yet implemented."
203 ;; 203 ;;
204 esac 204 esac
205 205
206 addread "/etc/subversion" 206 addread "/etc/subversion"
207 addwrite "${ESVN_STORE_DIR}" 207 addwrite "${ESVN_STORE_DIR}"
208 208
209 if [[ -n "${ESVN_UMASK}" ]]; then
210 eumask_push "${ESVN_UMASK}"
211 fi
212
209 if [[ ! -d ${ESVN_STORE_DIR} ]]; then 213 if [[ ! -d ${ESVN_STORE_DIR} ]]; then
210 debug-print "${FUNCNAME}: initial checkout. creating subversion directory" 214 debug-print "${FUNCNAME}: initial checkout. creating subversion directory"
211 mkdir -p "${ESVN_STORE_DIR}" || die "${ESVN}: can't mkdir ${ESVN_STORE_DIR}." 215 mkdir -m 775 -p "${ESVN_STORE_DIR}" || die "${ESVN}: can't mkdir ${ESVN_STORE_DIR}."
212 fi 216 fi
213 217
214 cd "${ESVN_STORE_DIR}" || die "${ESVN}: can't chdir to ${ESVN_STORE_DIR}" 218 pushd "${ESVN_STORE_DIR}" >/dev/null || die "${ESVN}: can't chdir to ${ESVN_STORE_DIR}"
215 219
216 local wc_path="$(subversion__get_wc_path "${repo_uri}")" 220 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
217 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion" 221 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion"
218 222
219 [[ -n "${revision}" ]] && options="${options} -r ${revision}" 223 [[ -n "${revision}" ]] && options="${options} -r ${revision}"
221 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then 225 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then
222 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please" 226 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please"
223 ewarn "see \${ESVN_REPO_URI}" 227 ewarn "see \${ESVN_REPO_URI}"
224 fi 228 fi
225 229
226 if has_version ">=dev-util/subversion-1.6.0"; then 230 if has_version ">=dev-vcs/subversion-1.6.0"; then
227 options="${options} --config-option=config:auth:password-stores=" 231 options="${options} --config-option=config:auth:password-stores="
228 fi 232 fi
229 233
230 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\"" 234 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\""
231 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\"" 235 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\""
239 einfo "subversion check out start -->" 243 einfo "subversion check out start -->"
240 einfo " repository: ${repo_uri}${revision:+@}${revision}" 244 einfo " repository: ${repo_uri}${revision:+@}${revision}"
241 245
242 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}" 246 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}"
243 247
244 mkdir -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}." 248 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}" 249 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}"
246 if [[ -n "${ESVN_USER}" ]]; then 250 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}." 251 ${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 252 else
249 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}." 253 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
250 fi 254 fi
251 255
252 elif [[ -n ${ESVN_OFFLINE} ]]; then 256 elif [[ -n ${ESVN_OFFLINE} ]]; then
257 svn upgrade "${wc_path}" &>/dev/null
253 svn cleanup "${wc_path}" 258 svn cleanup "${wc_path}" &>/dev/null
254 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy." 259 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy."
260
255 if [[ -n ${ESVN_REVISION} && ${ESVN_REVISION} != ${ESVN_WC_REVISION} ]]; then 261 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." 262 die "${ESVN}: You requested off-line updating and revision ${ESVN_REVISION} but only revision ${ESVN_WC_REVISION} is available locally."
257 fi 263 fi
258 einfo "Fetching disabled: Using existing repository copy at revision ${ESVN_WC_REVISION}." 264 einfo "Fetching disabled: Using existing repository copy at revision ${ESVN_WC_REVISION}."
259 else 265 else
266 svn upgrade "${wc_path}" &>/dev/null
260 svn cleanup "${wc_path}" 267 svn cleanup "${wc_path}" &>/dev/null
261 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy." 268 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy."
262 269
263 local esvn_up_freq= 270 local esvn_up_freq=
264 if [[ -n ${ESVN_UP_FREQ} ]]; then 271 if [[ -n ${ESVN_UP_FREQ} ]]; then
265 if [[ -n ${ESVN_UP_FREQ//[[:digit:]]} ]]; then 272 if [[ -n ${ESVN_UP_FREQ//[[:digit:]]} ]]; then
270 esvn_up_freq=no_update 277 esvn_up_freq=no_update
271 fi 278 fi
272 fi 279 fi
273 280
274 if [[ -z ${esvn_up_freq} ]]; then 281 if [[ -z ${esvn_up_freq} ]]; then
282 if [[ ${ESVN_WC_UUID} != $(subversion__svn_info "${repo_uri}" "Repository UUID") ]]; then
283 # UUID mismatch. Delete working copy and check out it again.
284 einfo "subversion recheck out start -->"
285 einfo " old UUID: ${ESVN_WC_UUID}"
286 einfo " new UUID: $(subversion__svn_info "${repo_uri}" "Repository UUID")"
287 einfo " repository: ${repo_uri}${revision:+@}${revision}"
288
289 rm -fr "${ESVN_PROJECT}" || die
290
291 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}"
292
293 mkdir -m 775 -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}."
294 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}"
295 if [[ -n "${ESVN_USER}" ]]; then
296 ${ESVN_FETCH_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
297 else
298 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
299 fi
275 if [[ ${ESVN_WC_URL} != $(subversion__get_repository_uri "${repo_uri}") ]]; then 300 elif [[ ${ESVN_WC_URL} != $(subversion__get_repository_uri "${repo_uri}") ]]; then
276 einfo "subversion switch start -->" 301 einfo "subversion switch start -->"
277 einfo " old repository: ${ESVN_WC_URL}@${ESVN_WC_REVISION}" 302 einfo " old repository: ${ESVN_WC_URL}@${ESVN_WC_REVISION}"
278 einfo " new repository: ${repo_uri}${revision:+@}${revision}" 303 einfo " new repository: ${repo_uri}${revision:+@}${revision}"
279 304
280 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}" 305 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}"
300 fi 325 fi
301 fi 326 fi
302 fi 327 fi
303 fi 328 fi
304 329
330 if [[ -n "${ESVN_UMASK}" ]]; then
331 eumask_pop
332 fi
333
305 einfo " working copy: ${wc_path}" 334 einfo " working copy: ${wc_path}"
306 335
307 if ! has "export" ${ESVN_RESTRICT}; then 336 if ! has "export" ${ESVN_RESTRICT}; then
308 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}" 337 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
309 338
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
319 echo 349 echo
320} 350}
321 351
322# @FUNCTION: subversion_bootstrap 352# @FUNCTION: subversion_bootstrap
323# @DESCRIPTION: 353# @DESCRIPTION:
328 fi 358 fi
329 359
330 cd "${S}" 360 cd "${S}"
331 361
332 if [[ -n ${ESVN_PATCHES} ]]; then 362 if [[ -n ${ESVN_PATCHES} ]]; then
363 local patch fpatch
333 einfo "apply patches -->" 364 einfo "apply patches -->"
334
335 local patch fpatch
336
337 for patch in ${ESVN_PATCHES}; do 365 for patch in ${ESVN_PATCHES}; do
338 if [[ -f ${patch} ]]; then 366 if [[ -f ${patch} ]]; then
339 epatch "${patch}" 367 epatch "${patch}"
340
341 else 368 else
342 for fpatch in ${FILESDIR}/${patch}; do 369 for fpatch in ${FILESDIR}/${patch}; do
343 if [[ -f ${fpatch} ]]; then 370 if [[ -f ${fpatch} ]]; then
344 epatch "${fpatch}" 371 epatch "${fpatch}"
345
346 else 372 else
347 die "${ESVN}: ${patch} not found" 373 die "${ESVN}: ${patch} not found"
348
349 fi 374 fi
350 done 375 done
351
352 fi 376 fi
353 done 377 done
354
355 echo 378 echo
356 fi 379 fi
357 380
358 if [[ -n ${ESVN_BOOTSTRAP} ]]; then 381 if [[ -n ${ESVN_BOOTSTRAP} ]]; then
359 einfo "begin bootstrap -->" 382 einfo "begin bootstrap -->"
360
361 if [[ -f ${ESVN_BOOTSTRAP} && -x ${ESVN_BOOTSTRAP} ]]; then 383 if [[ -f ${ESVN_BOOTSTRAP} && -x ${ESVN_BOOTSTRAP} ]]; then
362 einfo " bootstrap with a file: ${ESVN_BOOTSTRAP}" 384 einfo " bootstrap with a file: ${ESVN_BOOTSTRAP}"
363 eval "./${ESVN_BOOTSTRAP}" || die "${ESVN}: can't execute ESVN_BOOTSTRAP." 385 eval "./${ESVN_BOOTSTRAP}" || die "${ESVN}: can't execute ESVN_BOOTSTRAP."
364
365 else 386 else
366 einfo " bootstrap with command: ${ESVN_BOOTSTRAP}" 387 einfo " bootstrap with command: ${ESVN_BOOTSTRAP}"
367 eval "${ESVN_BOOTSTRAP}" || die "${ESVN}: can't eval ESVN_BOOTSTRAP." 388 eval "${ESVN_BOOTSTRAP}" || die "${ESVN}: can't eval ESVN_BOOTSTRAP."
368
369 fi
370 fi 389 fi
371} 390 fi
372
373# @FUNCTION: subversion_src_unpack
374# @DESCRIPTION:
375# Default src_unpack. Fetch and, in older EAPIs, bootstrap.
376subversion_src_unpack() {
377 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch."
378 has src_prepare ${EXPORTED_FUNCTIONS} || git_src_prepare
379}
380
381# @FUNCTION: subversion_src_prepare
382# @DESCRIPTION:
383# Default src_prepare. Bootstrap.
384subversion_src_prepare() {
385 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
386} 391}
387 392
388# @FUNCTION: subversion_wc_info 393# @FUNCTION: subversion_wc_info
389# @USAGE: [repo_uri] 394# @USAGE: [repo_uri]
390# @RETURN: ESVN_WC_URL, ESVN_WC_ROOT, ESVN_WC_UUID, ESVN_WC_REVISION and ESVN_WC_PATH 395# @RETURN: ESVN_WC_URL, ESVN_WC_ROOT, ESVN_WC_UUID, ESVN_WC_REVISION and ESVN_WC_PATH
409 export ESVN_WC_UUID="$(subversion__svn_info "${wc_path}" "Repository UUID")" 414 export ESVN_WC_UUID="$(subversion__svn_info "${wc_path}" "Repository UUID")"
410 export ESVN_WC_REVISION="$(subversion__svn_info "${wc_path}" "Revision")" 415 export ESVN_WC_REVISION="$(subversion__svn_info "${wc_path}" "Revision")"
411 export ESVN_WC_PATH="${wc_path}" 416 export ESVN_WC_PATH="${wc_path}"
412} 417}
413 418
414## -- Private Functions 419# @FUNCTION: subversion_src_unpack
415 420# @DESCRIPTION:
416## -- subversion__svn_info() ------------------------------------------------- # 421# Default src_unpack. Fetch and, in older EAPIs, bootstrap.
417# 422subversion_src_unpack() {
418# param $1 - a target. 423 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch."
419# param $2 - a key name. 424 if has "${EAPI:-0}" 0 1; then
420# 425 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
421subversion__svn_info() {
422 local target="${1}"
423 local key="${2}"
424
425 env LC_ALL=C svn info "${target}" | grep -i "^${key}" | cut -d" " -f2-
426}
427
428## -- subversion__get_repository_uri() --------------------------------------- #
429#
430# param $1 - a repository URI.
431subversion__get_repository_uri() {
432 local repo_uri="${1}"
433
434 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
435
436 if [[ -z ${repo_uri} ]]; then
437 die "${ESVN}: ESVN_REPO_URI (or specified URI) is empty."
438 fi 426 fi
439
440 # delete trailing slash
441 if [[ -z ${repo_uri##*/} ]]; then
442 repo_uri="${repo_uri%/}"
443 fi
444
445 repo_uri="${repo_uri%@*}"
446
447 echo "${repo_uri}"
448} 427}
449 428
450## -- subversion__get_wc_path() ---------------------------------------------- # 429# @FUNCTION: subversion_src_prepare
451# 430# @DESCRIPTION:
452# param $1 - a repository URI. 431# Default src_prepare. Bootstrap.
453subversion__get_wc_path() { 432subversion_src_prepare() {
454 local repo_uri="$(subversion__get_repository_uri "${1}")" 433 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
455
456 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
457
458 echo "${ESVN_STORE_DIR}/${ESVN_PROJECT}/${repo_uri##*/}"
459}
460
461## -- subversion__get_peg_revision() ----------------------------------------- #
462#
463# param $1 - a repository URI.
464subversion__get_peg_revision() {
465 local repo_uri="${1}"
466
467 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
468
469 # repo_uri has peg revision ?
470 if [[ ${repo_uri} != *@* ]]; then
471 debug-print "${FUNCNAME}: repo_uri does not have a peg revision."
472 fi
473
474 local peg_rev=
475 [[ ${repo_uri} = *@* ]] && peg_rev="${repo_uri##*@}"
476
477 debug-print "${FUNCNAME}: peg_rev = ${peg_rev}"
478
479 echo "${peg_rev}"
480} 434}
481 435
482# @FUNCTION: subversion_pkg_preinst 436# @FUNCTION: subversion_pkg_preinst
483# @USAGE: [repo_uri] 437# @USAGE: [repo_uri]
484# @DESCRIPTION: 438# @DESCRIPTION:
485# Log the svn revision of source code. Doing this in pkg_preinst because we 439# Log the svn revision of source code. Doing this in pkg_preinst because we
486# want the logs to stick around if packages are uninstalled without messing with 440# want the logs to stick around if packages are uninstalled without messing with
487# config protection. 441# config protection.
488subversion_pkg_preinst() { 442subversion_pkg_preinst() {
489 local pkgdate=$(date "+%Y%m%d %H:%M:%S") 443 local pkgdate=$(date "+%Y%m%d %H:%M:%S")
490 subversion_wc_info "${1:-${ESVN_REPO_URI}}" 444 subversion_wc_info "${1}"
491 if [[ -n ${ESCM_LOGDIR} ]]; then 445 if [[ -n ${ESCM_LOGDIR} ]]; then
492 local dir="${ROOT}/${ESCM_LOGDIR}/${CATEGORY}" 446 local dir="${ROOT}/${ESCM_LOGDIR}/${CATEGORY}"
493 if [[ ! -d ${dir} ]]; then 447 if [[ ! -d ${dir} ]]; then
494 mkdir -p "${dir}" || \ 448 mkdir -p "${dir}" || eerror "Failed to create '${dir}' for logging svn revision"
495 eerror "Failed to create '${dir}' for logging svn revision to '${PORTDIR_SCM}'"
496 fi 449 fi
497 local logmessage="svn: ${pkgdate} - ${PF}:${SLOT} was merged at revision ${ESVN_WC_REVISION}" 450 local logmessage="svn: ${pkgdate} - ${PF}:${SLOT} was merged at revision ${ESVN_WC_REVISION}"
498 if [[ -d ${dir} ]]; then 451 if [[ -d ${dir} ]]; then
499 echo "${logmessage}" >> "${dir}/${PN}.log" 452 echo "${logmessage}" >>"${dir}/${PN}.log"
500 else 453 else
501 eerror "Could not log the message '${logmessage}' to '${dir}/${PN}.log'" 454 eerror "Could not log the message '${logmessage}' to '${dir}/${PN}.log'"
502 fi 455 fi
503 fi 456 fi
504} 457}
458
459## -- Private Functions
460
461## -- subversion__svn_info() ------------------------------------------------- #
462#
463# param $1 - a target.
464# param $2 - a key name.
465#
466subversion__svn_info() {
467 local target="${1}"
468 local key="${2}"
469
470 env LC_ALL=C svn info ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" "${target}" \
471 | grep -i "^${key}" \
472 | cut -d" " -f2-
473}
474
475## -- subversion__get_repository_uri() --------------------------------------- #
476#
477# param $1 - a repository URI.
478subversion__get_repository_uri() {
479 local repo_uri="${1}"
480
481 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
482 if [[ -z ${repo_uri} ]]; then
483 die "${ESVN}: ESVN_REPO_URI (or specified URI) is empty."
484 fi
485 # delete trailing slash
486 if [[ -z ${repo_uri##*/} ]]; then
487 repo_uri="${repo_uri%/}"
488 fi
489 repo_uri="${repo_uri%@*}"
490
491 echo "${repo_uri}"
492}
493
494## -- subversion__get_wc_path() ---------------------------------------------- #
495#
496# param $1 - a repository URI.
497subversion__get_wc_path() {
498 local repo_uri="$(subversion__get_repository_uri "${1}")"
499
500 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
501
502 echo "${ESVN_STORE_DIR}/${ESVN_PROJECT}/${repo_uri##*/}"
503}
504
505## -- subversion__get_peg_revision() ----------------------------------------- #
506#
507# param $1 - a repository URI.
508subversion__get_peg_revision() {
509 local repo_uri="${1}"
510 local peg_rev=
511
512 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
513 # repo_uri has peg revision?
514 if [[ ${repo_uri} = *@* ]]; then
515 peg_rev="${repo_uri##*@}"
516 debug-print "${FUNCNAME}: peg_rev = ${peg_rev}"
517 else
518 debug-print "${FUNCNAME}: repo_uri does not have a peg revision."
519 fi
520
521 echo "${peg_rev}"
522}

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

  ViewVC Help
Powered by ViewVC 1.1.20