/[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.80
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.80 2012/07/29 03:37:37 hattya 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 ;;
23 *)
24 EXPORT_FUNCTIONS src_unpack src_prepare pkg_preinst
25 ;;
27esac 26esac
28EXPORT_FUNCTIONS ${EXPORTED_FUNCTIONS}
29 27
30DESCRIPTION="Based on the ${ECLASS} eclass" 28SUBVERSION_DEPEND="dev-vcs/subversion
31
32DEPEND="dev-util/subversion
33 net-misc/rsync" 29 net-misc/rsync"
30
31if [[ -z "${ESVN_DISABLE_DEPENDENCIES}" ]]; then
32 DEPEND="${SUBVERSION_DEPEND}"
33fi
34 34
35# @ECLASS-VARIABLE: ESVN_STORE_DIR 35# @ECLASS-VARIABLE: ESVN_STORE_DIR
36# @DESCRIPTION: 36# @DESCRIPTION:
37# subversion sources store directory. Users may override this in /etc/make.conf 37# 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" 38[[ -z ${ESVN_STORE_DIR} ]] && ESVN_STORE_DIR="${PORTAGE_ACTUAL_DISTDIR:-${DISTDIR}}/svn-src"
137# restrict. 137# restrict.
138# export) 138# export)
139# don't export the working copy to S. 139# don't export the working copy to S.
140ESVN_RESTRICT="${ESVN_RESTRICT:-}" 140ESVN_RESTRICT="${ESVN_RESTRICT:-}"
141 141
142# @ECLASS-VARIABLE: ESVN_DISABLE_DEPENDENCIES
143# @DESCRIPTION:
144# Set this variable to a non-empty value to disable the automatic inclusion of
145# Subversion in dependencies.
146ESVN_DISABLE_DEPENDENCIES="${ESVN_DISABLE_DEPENDENCIES:-}"
147
142# @ECLASS-VARIABLE: ESVN_OFFLINE 148# @ECLASS-VARIABLE: ESVN_OFFLINE
143# @DESCRIPTION: 149# @DESCRIPTION:
144# Set this variable to a non-empty value to disable the automatic updating of 150# 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 151# an svn source tree. This is intended to be set outside the subversion source
146# tree by users. 152# tree by users.
147ESVN_OFFLINE="${ESVN_OFFLINE:-${ESCM_OFFLINE}}" 153ESVN_OFFLINE="${ESVN_OFFLINE:-${EVCS_OFFLINE}}"
154
155# @ECLASS-VARIABLE: ESVN_UMASK
156# @DESCRIPTION:
157# Set this variable to a custom umask. This is intended to be set by users.
158# By setting this to something like 002, it can make life easier for people
159# who do development as non-root (but are in the portage group), and then
160# switch over to building with FEATURES=userpriv. Or vice-versa. Shouldn't
161# be a security issue here as anyone who has portage group write access
162# already can screw the system over in more creative ways.
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
181 197
182 [[ -n "${ESVN_REVISION}" ]] && revision="${ESVN_REVISION}" 198 [[ -n "${ESVN_REVISION}" ]] && revision="${ESVN_REVISION}"
183 199
184 # check for the protocol 200 # check for the protocol
185 local protocol="${repo_uri%%:*}" 201 local protocol="${repo_uri%%:*}"
186
187 case "${protocol}" in 202 case "${protocol}" in
188 http|https) 203 http|https)
189 if ! built_with_use --missing true -o dev-util/subversion webdav-neon webdav-serf || \ 204 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 205 echo
192 eerror "In order to emerge this package, you need to" 206 eerror "In order to emerge this package, you need to"
193 eerror "reinstall Subversion with support for WebDAV." 207 eerror "reinstall Subversion with support for WebDAV."
194 eerror "Subversion requires either Neon or Serf to support WebDAV." 208 eerror "Subversion requires either Neon or Serf to support WebDAV."
195 echo 209 echo
204 esac 218 esac
205 219
206 addread "/etc/subversion" 220 addread "/etc/subversion"
207 addwrite "${ESVN_STORE_DIR}" 221 addwrite "${ESVN_STORE_DIR}"
208 222
223 if [[ -n "${ESVN_UMASK}" ]]; then
224 eumask_push "${ESVN_UMASK}"
225 fi
226
209 if [[ ! -d ${ESVN_STORE_DIR} ]]; then 227 if [[ ! -d ${ESVN_STORE_DIR} ]]; then
210 debug-print "${FUNCNAME}: initial checkout. creating subversion directory" 228 debug-print "${FUNCNAME}: initial checkout. creating subversion directory"
211 mkdir -p "${ESVN_STORE_DIR}" || die "${ESVN}: can't mkdir ${ESVN_STORE_DIR}." 229 mkdir -m 775 -p "${ESVN_STORE_DIR}" || die "${ESVN}: can't mkdir ${ESVN_STORE_DIR}."
212 fi 230 fi
213 231
214 cd "${ESVN_STORE_DIR}" || die "${ESVN}: can't chdir to ${ESVN_STORE_DIR}" 232 pushd "${ESVN_STORE_DIR}" >/dev/null || die "${ESVN}: can't chdir to ${ESVN_STORE_DIR}"
215 233
216 local wc_path="$(subversion__get_wc_path "${repo_uri}")" 234 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
217 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion" 235 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion"
218 236
219 [[ -n "${revision}" ]] && options="${options} -r ${revision}" 237 [[ -n "${revision}" ]] && options="${options} -r ${revision}"
221 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then 239 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then
222 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please" 240 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please"
223 ewarn "see \${ESVN_REPO_URI}" 241 ewarn "see \${ESVN_REPO_URI}"
224 fi 242 fi
225 243
226 if has_version ">=dev-util/subversion-1.6.0"; then 244 if has_version ">=dev-vcs/subversion-1.6.0"; then
227 options="${options} --config-option=config:auth:password-stores=" 245 options="${options} --config-option=config:auth:password-stores="
228 fi 246 fi
229 247
230 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\"" 248 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\""
231 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\"" 249 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\""
239 einfo "subversion check out start -->" 257 einfo "subversion check out start -->"
240 einfo " repository: ${repo_uri}${revision:+@}${revision}" 258 einfo " repository: ${repo_uri}${revision:+@}${revision}"
241 259
242 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}" 260 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}"
243 261
244 mkdir -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}." 262 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}" 263 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}"
246 if [[ -n "${ESVN_USER}" ]]; then 264 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}." 265 ${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 266 else
249 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}." 267 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
250 fi 268 fi
251 269
252 elif [[ -n ${ESVN_OFFLINE} ]]; then 270 elif [[ -n ${ESVN_OFFLINE} ]]; then
271 svn upgrade "${wc_path}" &>/dev/null
253 svn cleanup "${wc_path}" 272 svn cleanup "${wc_path}" &>/dev/null
254 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy." 273 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy."
274
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
319 echo 363 echo
320} 364}
321 365
322# @FUNCTION: subversion_bootstrap 366# @FUNCTION: subversion_bootstrap
323# @DESCRIPTION: 367# @DESCRIPTION:
328 fi 372 fi
329 373
330 cd "${S}" 374 cd "${S}"
331 375
332 if [[ -n ${ESVN_PATCHES} ]]; then 376 if [[ -n ${ESVN_PATCHES} ]]; then
377 local patch fpatch
333 einfo "apply patches -->" 378 einfo "apply patches -->"
334
335 local patch fpatch
336
337 for patch in ${ESVN_PATCHES}; do 379 for patch in ${ESVN_PATCHES}; do
338 if [[ -f ${patch} ]]; then 380 if [[ -f ${patch} ]]; then
339 epatch "${patch}" 381 epatch "${patch}"
340
341 else 382 else
342 for fpatch in ${FILESDIR}/${patch}; do 383 for fpatch in ${FILESDIR}/${patch}; do
343 if [[ -f ${fpatch} ]]; then 384 if [[ -f ${fpatch} ]]; then
344 epatch "${fpatch}" 385 epatch "${fpatch}"
345
346 else 386 else
347 die "${ESVN}: ${patch} not found" 387 die "${ESVN}: ${patch} not found"
348
349 fi 388 fi
350 done 389 done
351
352 fi 390 fi
353 done 391 done
354
355 echo 392 echo
356 fi 393 fi
357 394
358 if [[ -n ${ESVN_BOOTSTRAP} ]]; then 395 if [[ -n ${ESVN_BOOTSTRAP} ]]; then
359 einfo "begin bootstrap -->" 396 einfo "begin bootstrap -->"
360
361 if [[ -f ${ESVN_BOOTSTRAP} && -x ${ESVN_BOOTSTRAP} ]]; then 397 if [[ -f ${ESVN_BOOTSTRAP} && -x ${ESVN_BOOTSTRAP} ]]; then
362 einfo " bootstrap with a file: ${ESVN_BOOTSTRAP}" 398 einfo " bootstrap with a file: ${ESVN_BOOTSTRAP}"
363 eval "./${ESVN_BOOTSTRAP}" || die "${ESVN}: can't execute ESVN_BOOTSTRAP." 399 eval "./${ESVN_BOOTSTRAP}" || die "${ESVN}: can't execute ESVN_BOOTSTRAP."
364
365 else 400 else
366 einfo " bootstrap with command: ${ESVN_BOOTSTRAP}" 401 einfo " bootstrap with command: ${ESVN_BOOTSTRAP}"
367 eval "${ESVN_BOOTSTRAP}" || die "${ESVN}: can't eval ESVN_BOOTSTRAP." 402 eval "${ESVN_BOOTSTRAP}" || die "${ESVN}: can't eval ESVN_BOOTSTRAP."
368
369 fi
370 fi 403 fi
371} 404 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} 405}
387 406
388# @FUNCTION: subversion_wc_info 407# @FUNCTION: subversion_wc_info
389# @USAGE: [repo_uri] 408# @USAGE: [repo_uri]
390# @RETURN: ESVN_WC_URL, ESVN_WC_ROOT, ESVN_WC_UUID, ESVN_WC_REVISION and ESVN_WC_PATH 409# @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")" 428 export ESVN_WC_UUID="$(subversion__svn_info "${wc_path}" "Repository UUID")"
410 export ESVN_WC_REVISION="$(subversion__svn_info "${wc_path}" "Revision")" 429 export ESVN_WC_REVISION="$(subversion__svn_info "${wc_path}" "Revision")"
411 export ESVN_WC_PATH="${wc_path}" 430 export ESVN_WC_PATH="${wc_path}"
412} 431}
413 432
414## -- Private Functions 433# @FUNCTION: subversion_src_unpack
415 434# @DESCRIPTION:
416## -- subversion__svn_info() ------------------------------------------------- # 435# Default src_unpack. Fetch and, in older EAPIs, bootstrap.
417# 436subversion_src_unpack() {
418# param $1 - a target. 437 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch."
419# param $2 - a key name. 438 if has "${EAPI:-0}" 0 1; then
420# 439 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 440 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} 441}
449 442
450## -- subversion__get_wc_path() ---------------------------------------------- # 443# @FUNCTION: subversion_src_prepare
451# 444# @DESCRIPTION:
452# param $1 - a repository URI. 445# Default src_prepare. Bootstrap.
453subversion__get_wc_path() { 446subversion_src_prepare() {
454 local repo_uri="$(subversion__get_repository_uri "${1}")" 447 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} 448}
481 449
482# @FUNCTION: subversion_pkg_preinst 450# @FUNCTION: subversion_pkg_preinst
483# @USAGE: [repo_uri] 451# @USAGE: [repo_uri]
484# @DESCRIPTION: 452# @DESCRIPTION:
485# Log the svn revision of source code. Doing this in pkg_preinst because we 453# 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 454# want the logs to stick around if packages are uninstalled without messing with
487# config protection. 455# config protection.
488subversion_pkg_preinst() { 456subversion_pkg_preinst() {
489 local pkgdate=$(date "+%Y%m%d %H:%M:%S") 457 local pkgdate=$(date "+%Y%m%d %H:%M:%S")
490 subversion_wc_info "${1:-${ESVN_REPO_URI}}" 458 subversion_wc_info "${1}"
491 if [[ -n ${ESCM_LOGDIR} ]]; then 459 if [[ -n ${ESCM_LOGDIR} ]]; then
492 local dir="${ROOT}/${ESCM_LOGDIR}/${CATEGORY}" 460 local dir="${ROOT}/${ESCM_LOGDIR}/${CATEGORY}"
493 if [[ ! -d ${dir} ]]; then 461 if [[ ! -d ${dir} ]]; then
494 mkdir -p "${dir}" || \ 462 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 463 fi
497 local logmessage="svn: ${pkgdate} - ${PF}:${SLOT} was merged at revision ${ESVN_WC_REVISION}" 464 local logmessage="svn: ${pkgdate} - ${PF}:${SLOT} was merged at revision ${ESVN_WC_REVISION}"
498 if [[ -d ${dir} ]]; then 465 if [[ -d ${dir} ]]; then
499 echo "${logmessage}" >> "${dir}/${PN}.log" 466 echo "${logmessage}" >>"${dir}/${PN}.log"
500 else 467 else
501 eerror "Could not log the message '${logmessage}' to '${dir}/${PN}.log'" 468 eerror "Could not log the message '${logmessage}' to '${dir}/${PN}.log'"
502 fi 469 fi
503 fi 470 fi
504} 471}
472
473## -- Private Functions
474
475## -- subversion__svn_info() ------------------------------------------------- #
476#
477# param $1 - a target.
478# param $2 - a key name.
479#
480subversion__svn_info() {
481 local target="${1}"
482 local key="${2}"
483
484 env LC_ALL=C svn info ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" "${target}" \
485 | grep -i "^${key}" \
486 | cut -d" " -f2-
487}
488
489## -- subversion__get_repository_uri() --------------------------------------- #
490#
491# param $1 - a repository URI.
492subversion__get_repository_uri() {
493 local repo_uri="${1}"
494
495 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
496 if [[ -z ${repo_uri} ]]; then
497 die "${ESVN}: ESVN_REPO_URI (or specified URI) is empty."
498 fi
499 # delete trailing slash
500 if [[ -z ${repo_uri##*/} ]]; then
501 repo_uri="${repo_uri%/}"
502 fi
503 repo_uri="${repo_uri%@*}"
504
505 echo "${repo_uri}"
506}
507
508## -- subversion__get_wc_path() ---------------------------------------------- #
509#
510# param $1 - a repository URI.
511subversion__get_wc_path() {
512 local repo_uri="$(subversion__get_repository_uri "${1}")"
513
514 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
515
516 echo "${ESVN_STORE_DIR}/${ESVN_PROJECT}/${repo_uri##*/}"
517}
518
519## -- subversion__get_peg_revision() ----------------------------------------- #
520#
521# param $1 - a repository URI.
522subversion__get_peg_revision() {
523 local repo_uri="${1}"
524 local peg_rev=
525
526 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
527 # repo_uri has peg revision?
528 if [[ ${repo_uri} = *@* ]]; then
529 peg_rev="${repo_uri##*@}"
530 debug-print "${FUNCNAME}: peg_rev = ${peg_rev}"
531 else
532 debug-print "${FUNCNAME}: repo_uri does not have a peg revision."
533 fi
534
535 echo "${peg_rev}"
536}

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

  ViewVC Help
Powered by ViewVC 1.1.20