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

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

  ViewVC Help
Powered by ViewVC 1.1.20