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

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

  ViewVC Help
Powered by ViewVC 1.1.20