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

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

  ViewVC Help
Powered by ViewVC 1.1.20