/[gentoo-x86]/eclass/subversion.eclass
Gentoo

Diff of /eclass/subversion.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.31 Revision 1.50
1# Copyright 1999-2006 Gentoo Foundation 1# Copyright 1999-2008 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.31 2006/04/30 09:26:56 hattya Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/subversion.eclass,v 1.50 2008/02/20 20:36:30 zlin Exp $
4 4
5## --------------------------------------------------------------------------- # 5# @ECLASS: subversion.eclass
6# @MAINTAINER:
7# Akinori Hattori <hattya@gentoo.org>
8# Bo ├śrsted Andresen <zlin@gentoo.org>
9#
6# Author: Akinori Hattori <hattya@gentoo.org> 10# Original Author: Akinori Hattori <hattya@gentoo.org>
7# 11#
8# The subversion eclass is written to fetch the software sources from 12# @BLURB: The subversion eclass is written to fetch software sources from subversion repositories
9# subversion repositories like the cvs eclass. 13# @DESCRIPTION:
14# The subversion eclass provides functions to fetch, patch and bootstrap
15# software sources from subversion repositories.
10# 16#
11# 17# You must define the ESVN_REPO_URI variable before inheriting this eclass.
12# Description:
13# If you use this eclass, the ${S} is ${WORKDIR}/${P}.
14# It is necessary to define the ESVN_REPO_URI variable at least.
15#
16## --------------------------------------------------------------------------- #
17 18
18inherit eutils 19inherit eutils
19 20
20ESVN="subversion.eclass" 21ESVN="${ECLASS}"
21 22
22EXPORT_FUNCTIONS src_unpack 23EXPORT_FUNCTIONS src_unpack pkg_preinst
23 24
24HOMEPAGE="http://subversion.tigris.org/"
25DESCRIPTION="Based on the ${ECLASS} eclass" 25DESCRIPTION="Based on the ${ECLASS} eclass"
26 26
27
28## -- add subversion in DEPEND
29#
30DEPEND="dev-util/subversion" 27DEPEND="dev-util/subversion
28 net-misc/rsync"
31 29
32 30# @ECLASS-VARIABLE: ESVN_STORE_DIR
33## -- ESVN_STORE_DIR: subversion sources store directory 31# @DESCRIPTION:
34# 32# subversion sources store directory. Users may override this in /etc/make.conf
35ESVN_STORE_DIR="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/svn-src" 33[[ -z ${ESVN_STORE_DIR} ]] && ESVN_STORE_DIR="${PORTAGE_ACTUAL_DISTDIR:-${DISTDIR}}/svn-src"
36 34
37 35# @ECLASS-VARIABLE: ESVN_FETCH_CMD
38## -- ESVN_FETCH_CMD: subversion fetch command 36# @DESCRIPTION:
39# 37# subversion checkout command
40ESVN_FETCH_CMD="svn checkout" 38ESVN_FETCH_CMD="svn checkout"
41 39
42## -- ESVN_UPDATE_CMD: subversion update command 40# @ECLASS-VARIABLE: ESVN_UPDATE_CMD
43# 41# @DESCRIPTION:
42# subversion update command
44ESVN_UPDATE_CMD="svn update" 43ESVN_UPDATE_CMD="svn update"
45 44
45# @ECLASS-VARIABLE: ESVN_SWITCH_CMD
46# @DESCRIPTION:
47# subversion switch command
48ESVN_SWITCH_CMD="svn switch"
46 49
47## -- ESVN_OPTIONS: 50# @ECLASS-VARIABLE: ESVN_OPTIONS
48# 51# @DESCRIPTION:
49# the options passed to checkout or update. 52# the options passed to checkout or update. If you want a specific revision see
50# 53# ESVN_REPO_URI instead of using -rREV.
51[ -z "${ESVN_OPTIONS}" ] && ESVN_OPTIONS= 54ESVN_OPTIONS="${ESVN_OPTIONS:-}"
52 55
53 56# @ECLASS-VARIABLE: ESVN_REPO_URI
54## -- ESVN_REPO_URI: repository uri 57# @DESCRIPTION:
58# repository uri
55# 59#
56# e.g. http://foo/trunk, svn://bar/trunk 60# e.g. http://foo/trunk, svn://bar/trunk, svn://bar/branch/foo@1234
57# 61#
58# supported protocols: 62# supported protocols:
59# http:// 63# http://
60# https:// 64# https://
61# svn:// 65# svn://
66# svn+ssh://
62# 67#
63[ -z "${ESVN_REPO_URI}" ] && ESVN_REPO_URI="" 68# to peg to a specific revision, append @REV to the repo's uri
69ESVN_REPO_URI="${ESVN_REPO_URI:-}"
64 70
71# @ECLASS-VARIABLE: ESVN_REVISION
72# @DESCRIPTION:
73# User configurable revision checkout or update to from the repository
74#
75# Useful for live svn or trunk svn ebuilds allowing the user to peg
76# to a specific revision
77#
78# Note: This should never be set in an ebuild!
79ESVN_REVISION="${ESVN_REVISION:-}"
65 80
66## -- ESVN_PROJECT: project name of your ebuild 81# @ECLASS-VARIABLE: ESVN_PROJECT
82# @DESCRIPTION:
83# project name of your ebuild (= name space)
67# 84#
68# subversion eclass will check out the subversion repository like: 85# subversion eclass will check out the subversion repository like:
69# 86#
70# ${ESVN_STORE_DIR}/${ESVN_PROJECT}/${ESVN_REPO_URI##*/} 87# ${ESVN_STORE_DIR}/${ESVN_PROJECT}/${ESVN_REPO_URI##*/}
71# 88#
73# http://svn.collab.net/repo/svn/trunk/. and PN is subversion-svn. 90# http://svn.collab.net/repo/svn/trunk/. and PN is subversion-svn.
74# it will check out like: 91# it will check out like:
75# 92#
76# ${ESVN_STORE_DIR}/subversion/trunk 93# ${ESVN_STORE_DIR}/subversion/trunk
77# 94#
95# this is not used in order to declare the name of the upstream project.
96# so that you can declare this like:
97#
98# # jakarta commons-loggin
99# ESVN_PROJECT=commons/logging
100#
78# default: ${PN/-svn}. 101# default: ${PN/-svn}.
79# 102ESVN_PROJECT="${ESVN_PROJECT:-${PN/-svn}}"
80[ -z "${ESVN_PROJECT}" ] && ESVN_PROJECT="${PN/-svn}"
81 103
82 104# @ECLASS-VARIABLE: ESVN_BOOTSTRAP
83## -- ESVN_BOOTSTRAP: 105# @DESCRIPTION:
84#
85# bootstrap script or command like autogen.sh or etc.. 106# bootstrap script or command like autogen.sh or etc..
86# 107ESVN_BOOTSTRAP="${ESVN_BOOTSTRAP:-}"
87[ -z "${ESVN_BOOTSTRAP}" ] && ESVN_BOOTSTRAP=""
88 108
89 109# @ECLASS-VARIABLE: ESVN_PATCHES
90## -- ESVN_PATCHES: 110# @DESCRIPTION:
91#
92# subversion eclass can apply pathces in subversion_bootstrap(). 111# subversion eclass can apply patches in subversion_bootstrap().
93# you can use regexp in this valiable like *.diff or *.patch or etc. 112# you can use regexp in this variable like *.diff or *.patch or etc.
94# NOTE: this patches will apply before eval ESVN_BOOTSTRAP. 113# NOTE: patches will be applied before ESVN_BOOTSTRAP is processed.
95# 114#
96# the process of applying the patch is: 115# Patches are searched both in ${PWD} and ${FILESDIR}, if not found in either
97# 1. just epatch it, if the patch exists in the path. 116# location, the installation dies.
98# 2. scan it under FILESDIR and epatch it, if the patch exists in FILESDIR. 117ESVN_PATCHES="${ESVN_PATCHES:-}"
99# 3. die.
100#
101[ -z "${ESVN_PATCHES}" ] && ESVN_PATCHES=""
102 118
119# @ECLASS-VARIABLE: ESVN_RESTRICT
120# @DESCRIPTION:
121# this should be a space delimited list of subversion eclass features to
122# restrict.
123# export)
124# don't export the working copy to S.
125ESVN_RESTRICT="${ESVN_RESTRICT:-}"
103 126
104## -- subversion_svn_fetch() ------------------------------------------------- # 127# @ECLASS-VARIABLE: ESVN_OFFLINE
128# @DESCRIPTION:
129# Set this variable to a non-empty value to disable the automatic updating of
130# an svn source tree. This is intended to be set outside the subversion source
131# tree by users.
132ESVN_OFFLINE="${ESVN_OFFLINE:-${ESCM_OFFLINE}}"
105 133
134# @ECLASS-VARIABLE: ESCM_LOGDIR
135# @DESCRIPTION:
136# User configuration variable. If set to a path such as e.g. /var/log/scm any
137# package inheriting from subversion.eclass will record svn revision to
138# ${CATEGORY}/${PN}.log in that path in pkg_preinst. This is not supposed to be
139# set by ebuilds/eclasses. It defaults to empty so users need to opt in.
140ESCM_LOGDIR="${ESCM_LOGDIR:=}"
141
142# @FUNCTION: subversion_fetch
143# @USAGE: [repo_uri] [destination]
144# @DESCRIPTION:
145# Wrapper function to fetch sources from subversion via svn checkout or svn update,
146# depending on whether there is an existing working copy in ${ESVN_STORE_DIR}.
147#
148# Can take two optional parameters:
149# repo_uri - a repository URI. default is ESVN_REPO_URI.
150# destination - a check out path in S.
106function subversion_svn_fetch() { 151subversion_fetch() {
152 local repo_uri="$(subversion__get_repository_uri "${1:-${ESVN_REPO_URI}}")"
153 local revision="$(subversion__get_peg_revision "${1:-${ESVN_REPO_URI}}")"
154 local S_dest="${2}"
107 155
108 local ESVN_CO_DIR 156 [[ -n "${ESVN_REVISION}" ]] && revision="${ESVN_REVISION}"
109 157
110 # ESVN_REPO_URI is empty.
111 [ -z "${ESVN_REPO_URI}" ] && die "${ESVN}: ESVN_REPO_URI is empty."
112
113 # check for the protocol. 158 # check for the protocol
114 case ${ESVN_REPO_URI%%:*} in 159 local protocol="${repo_uri%%:*}"
160
161 case "${protocol}" in
115 http|https) 162 http|https)
116 if built_with_use dev-util/subversion nowebdav; then 163 if built_with_use dev-util/subversion nowebdav; then
164 echo
117 eerror "In order to emerge this package, you need to" 165 eerror "In order to emerge this package, you need to"
118 eerror "re-emerge subversion with USE=-nowebdav" 166 eerror "re-emerge subversion with USE=-nowebdav"
167 echo
119 die "Please run 'USE=-nowebdav emerge subversion'" 168 die "${ESVN}: please run 'USE=-nowebdav emerge subversion'"
120 fi 169 fi
121 ;; 170 ;;
122 svn) ;; 171 svn|svn+ssh)
172 ;;
123 *) 173 *)
124 die "${ESVN}: fetch from "${ESVN_REPO_URI%:*}" is not yet implemented." 174 die "${ESVN}: fetch from '${protocol}' is not yet implemented."
125 ;; 175 ;;
126 esac 176 esac
127 177
178 addread "/etc/subversion"
179 addwrite "${ESVN_STORE_DIR}"
180
128 if [ ! -d "${ESVN_STORE_DIR}" ]; then 181 if [[ ! -d ${ESVN_STORE_DIR} ]]; then
129 debug-print "${FUNCNAME}: initial checkout. creating subversion directory" 182 debug-print "${FUNCNAME}: initial checkout. creating subversion directory"
130
131 addwrite /
132 mkdir -p "${ESVN_STORE_DIR}" || die "${ESVN}: can't mkdir ${ESVN_STORE_DIR}." 183 mkdir -p "${ESVN_STORE_DIR}" || die "${ESVN}: can't mkdir ${ESVN_STORE_DIR}."
133 chmod -f o+rw "${ESVN_STORE_DIR}" || die "${ESVN}: can't chmod ${ESVN_STORE_DIR}."
134 export SANDBOX_WRITE="${SANDBOX_WRITE%%:/}"
135 fi 184 fi
136 185
137 cd -P "${ESVN_STORE_DIR}" || die "${ESVN}: can't chdir to ${ESVN_STORE_DIR}" 186 cd "${ESVN_STORE_DIR}" || die "${ESVN}: can't chdir to ${ESVN_STORE_DIR}"
138 ESVN_STORE_DIR=${PWD}
139 187
140 # every time 188 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
141 addwrite "/etc/subversion"
142 addwrite "${ESVN_STORE_DIR}"
143
144 if ! has userpriv ${FEATURES}; then
145 # -userpriv
146 addwrite "/root/.subversion"
147
148 else
149 # +userpriv
150 ESVN_OPTIONS="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion" 189 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion"
151 190
152 fi 191 [[ -n "${revision}" ]] && options="${options} -r ${revision}"
153 192
154 [ -z "${ESVN_REPO_URI##*/}" ] && ESVN_REPO_URI="${ESVN_REPO_URI%/}" 193 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then
155 ESVN_CO_DIR="${ESVN_PROJECT}/${ESVN_REPO_URI##*/}" 194 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please"
195 ewarn "see \${ESVN_REPO_URI}"
196 fi
156 197
198 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\""
157 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\"" 199 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\""
200 debug-print "${FUNCNAME}: options = \"${options}\""
158 201
159 if [ ! -d "${ESVN_CO_DIR}/.svn" ]; then 202 if [[ ! -d ${wc_path}/.svn ]]; then
160 # first check out 203 # first check out
161 einfo "subversion check out start -->" 204 einfo "subversion check out start -->"
162 einfo " repository: ${ESVN_REPO_URI}" 205 einfo " repository: ${repo_uri}${revision:+@}${revision}"
163 206
207 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}"
208
164 mkdir -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}." 209 mkdir -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}."
165 chmod -f o+rw "${ESVN_PROJECT}" || die "${ESVN}: can't chmod ${ESVN_PROJECT}." 210 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}"
166 cd "${ESVN_PROJECT}" 211 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch from ${repo_uri}."
167 ${ESVN_FETCH_CMD} ${ESVN_OPTIONS} "${ESVN_REPO_URI}" || die "${ESVN}: can't fetch from ${ESVN_REPO_URI}."
168 212
213 elif [[ -n ${ESVN_OFFLINE} ]]; then
214 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy."
215 if [[ -n ${ESVN_REVISION} && ${ESVN_REVISION} != ${ESVN_WC_REVISION} ]]; then
216 die "${ESVN}: You requested off-line updating and revision ${ESVN_REVISION} but only revision ${ESVN_WC_REVISION} is available locally."
217 fi
218 einfo "Fetching disabled: Using existing repository copy"
169 else 219 else
220 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy."
221
222 if [[ ${ESVN_WC_URL} != $(subversion__get_repository_uri "${repo_uri}") ]]; then
223 einfo "suversion switch start -->"
224 einfo " old repository: ${ESVN_WC_URL}@${ESVN_WC_REVISION}"
225 einfo " new repository: ${repo_uri}${revision:+@}${revision}"
226
227 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}"
228
229 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
230 ${ESVN_SWITCH_CMD} ${options} ${repo_uri} || die "${ESVN}: can't update from ${repo_uri}"
231 else
170 # update working copy 232 # update working copy
171 einfo "subversion update start -->" 233 einfo "subversion update start -->"
172 einfo " repository: ${ESVN_REPO_URI}" 234 einfo " repository: ${repo_uri}${revision:+@}${revision}"
173 235
174 cd "${ESVN_CO_DIR}" 236 debug-print "${FUNCNAME}: ${ESVN_UPDATE_CMD} ${options}"
237
238 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
175 ${ESVN_UPDATE_CMD} ${ESVN_OPTIONS} || die "${ESVN}: can't update from ${ESVN_REPO_URI}." 239 ${ESVN_UPDATE_CMD} ${options} || die "${ESVN}: can't update from ${repo_uri}."
176
177 fi 240 fi
178 241
179 einfo " working copy: ${ESVN_STORE_DIR}/${ESVN_CO_DIR}" 242 fi
180 243
244 einfo " working copy: ${wc_path}"
245
246 if ! has "export" ${ESVN_RESTRICT}; then
247 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
248
249 local S="${S}/${S_dest}"
250
181 # export to the ${WORKDIR} 251 # export to the ${WORKDIR}
182 # "svn export" has a bug. see http://bugs.gentoo.org/119236 252 #* "svn export" has a bug. see http://bugs.gentoo.org/119236
183 #svn export "${ESVN_STORE_DIR}/${ESVN_CO_DIR}" "${S}" || die "${ESVN}: can't export to ${S}." 253 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}."
184 rsync -a --exclude=".svn/" "${ESVN_STORE_DIR}/${ESVN_CO_DIR}/" "${S}" || die "${ESVN}: can't export to ${S}." 254 rsync -rlpgo --exclude=".svn/" . "${S}" || die "${ESVN}: can't export to ${S}."
255 fi
256
185 echo 257 echo
186
187} 258}
188 259
189 260# @FUNCTION: subversion_bootstrap
190## -- subversion_bootstrap() ------------------------------------------------ # 261# @DESCRIPTION:
191 262# Apply patches in ${ESVN_PATCHES} and run ${ESVN_BOOTSTRAP} if specified.
192function subversion_bootstrap() { 263subversion_bootstrap() {
193 264 if has "export" ${ESVN_RESTRICT}; then
194 local patch lpatch 265 return
266 fi
195 267
196 cd "${S}" 268 cd "${S}"
197 269
198 if [ "${ESVN_PATCHES}" ]; then 270 if [[ -n ${ESVN_PATCHES} ]]; then
199 einfo "apply patches -->" 271 einfo "apply patches -->"
200 272
273 local patch fpatch
274
201 for patch in ${ESVN_PATCHES}; do 275 for patch in ${ESVN_PATCHES}; do
202 if [ -f "${patch}" ]; then 276 if [[ -f ${patch} ]]; then
203 epatch ${patch} 277 epatch "${patch}"
204 278
205 else 279 else
206 for lpatch in ${FILESDIR}/${patch}; do 280 for fpatch in ${FILESDIR}/${patch}; do
207 if [ -f "${lpatch}" ]; then 281 if [[ -f ${fpatch} ]]; then
208 epatch ${lpatch} 282 epatch "${fpatch}"
209 283
210 else 284 else
211 die "${ESVN}; ${patch} is not found" 285 die "${ESVN}: ${patch} not found"
212 286
213 fi 287 fi
214 done 288 done
289
215 fi 290 fi
216 done 291 done
292
217 echo 293 echo
218 fi 294 fi
219 295
220 if [ "${ESVN_BOOTSTRAP}" ]; then 296 if [[ -n ${ESVN_BOOTSTRAP} ]]; then
221 einfo "begin bootstrap -->" 297 einfo "begin bootstrap -->"
222 298
223 if [ -f "${ESVN_BOOTSTRAP}" -a -x "${ESVN_BOOTSTRAP}" ]; then 299 if [[ -f ${ESVN_BOOTSTRAP} && -x ${ESVN_BOOTSTRAP} ]]; then
224 einfo " bootstrap with a file: ${ESVN_BOOTSTRAP}" 300 einfo " bootstrap with a file: ${ESVN_BOOTSTRAP}"
225 eval "./${ESVN_BOOTSTRAP}" || die "${ESVN}: can't execute ESVN_BOOTSTRAP." 301 eval "./${ESVN_BOOTSTRAP}" || die "${ESVN}: can't execute ESVN_BOOTSTRAP."
226 302
227 else 303 else
228 einfo " bootstrap with commands: ${ESVN_BOOTSTRAP}" 304 einfo " bootstrap with command: ${ESVN_BOOTSTRAP}"
229 eval "${ESVN_BOOTSTRAP}" || die "${ESVN}: can't eval ESVN_BOOTSTRAP." 305 eval "${ESVN_BOOTSTRAP}" || die "${ESVN}: can't eval ESVN_BOOTSTRAP."
230 306
231 fi 307 fi
232 fi 308 fi
233
234} 309}
235 310
236 311# @FUNCTION: subversion_src_unpack
237## -- subversion_src_unpack() ------------------------------------------------ # 312# @DESCRIPTION:
238 313# default src_unpack. fetch and bootstrap.
239function subversion_src_unpack() { 314subversion_src_unpack() {
240
241 subversion_svn_fetch || die "${ESVN}: unknown problem in subversion_svn_fetch()." 315 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch."
242 subversion_bootstrap || die "${ESVN}: unknown problem in subversion_bootstrap()." 316 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
243
244} 317}
318
319# @FUNCTION: subversion_wc_info
320# @USAGE: [repo_uri]
321# @RETURN: ESVN_WC_URL, ESVN_WC_ROOT, ESVN_WC_UUID, ESVN_WC_REVISION and ESVN_WC_PATH
322# @DESCRIPTION:
323# Get svn info for the specified repo_uri. The default repo_uri is ESVN_REPO_URI.
324#
325# The working copy information on the specified repository URI are set to
326# ESVN_WC_* variables.
327subversion_wc_info() {
328 local repo_uri="$(subversion__get_repository_uri "${1}")"
329 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
330
331 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
332 debug-print "${FUNCNAME}: wc_path = ${wc_path}"
333
334 if [[ ! -d ${wc_path} ]]; then
335 return 1
336 fi
337
338 export ESVN_WC_URL="$(subversion__svn_info "${wc_path}" "URL")"
339 export ESVN_WC_ROOT="$(subversion__svn_info "${wc_path}" "Repository Root")"
340 export ESVN_WC_UUID="$(subversion__svn_info "${wc_path}" "Repository UUID")"
341 export ESVN_WC_REVISION="$(subversion__svn_info "${wc_path}" "Revision")"
342 export ESVN_WC_PATH="${wc_path}"
343}
344
345## -- Private Functions
346
347## -- subversion__svn_info() ------------------------------------------------- #
348#
349# param $1 - a target.
350# param $2 - a key name.
351#
352subversion__svn_info() {
353 local target="${1}"
354 local key="${2}"
355
356 env LC_ALL=C svn info "${target}" | grep -i "^${key}" | cut -d" " -f2-
357}
358
359## -- subversion__get_repository_uri() --------------------------------------- #
360#
361# param $1 - a repository URI.
362subversion__get_repository_uri() {
363 local repo_uri="${1}"
364
365 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
366
367 if [[ -z ${repo_uri} ]]; then
368 die "${ESVN}: ESVN_REPO_URI (or specified URI) is empty."
369 fi
370
371 # delete trailing slash
372 if [[ -z ${repo_uri##*/} ]]; then
373 repo_uri="${repo_uri%/}"
374 fi
375
376 repo_uri="${repo_uri%@*}"
377
378 echo "${repo_uri}"
379}
380
381## -- subversion__get_wc_path() ---------------------------------------------- #
382#
383# param $1 - a repository URI.
384subversion__get_wc_path() {
385 local repo_uri="$(subversion__get_repository_uri "${1}")"
386
387 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
388
389 echo "${ESVN_STORE_DIR}/${ESVN_PROJECT}/${repo_uri##*/}"
390}
391
392## -- subversion__get_peg_revision() ----------------------------------------- #
393#
394# param $1 - a repository URI.
395subversion__get_peg_revision() {
396 local repo_uri="${1}"
397
398 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
399
400 # repo_uri has peg revision ?
401 if [[ ${repo_uri} != *@* ]]; then
402 debug-print "${FUNCNAME}: repo_uri does not have a peg revision."
403 fi
404
405 local peg_rev=
406 [[ ${repo_uri} = *@* ]] && peg_rev="${repo_uri##*@}"
407
408 debug-print "${FUNCNAME}: peg_rev = ${peg_rev}"
409
410 echo "${peg_rev}"
411}
412
413# @FUNCTION: subversion_pkg_preinst
414# @DESCRIPTION:
415# Log the svn revision of source code. Doing this in pkg_preinst because we
416# want the logs to stick around if packages are uninstalled without messing with
417# config protection.
418subversion_pkg_preinst() {
419 local pkgdate=$(date "+%Y%m%d %H:%M:%S")
420 subversion_wc_info
421 if [[ -n ${ESCM_LOGDIR} ]]; then
422 local dir="${ROOT}/${ESCM_LOGDIR}/${CATEGORY}"
423 if [[ ! -d ${dir} ]]; then
424 mkdir -p "${dir}" || \
425 eerror "Failed to create '${dir}' for logging svn revision to '${PORTDIR_SCM}'"
426 fi
427 local logmessage="svn: ${pkgdate} - ${PF}:${SLOT} was merged at revision ${ESVN_WC_REVISION}"
428 if [[ -d ${dir} ]]; then
429 echo "${logmessage}" >> "${dir}/${PN}.log"
430 else
431 eerror "Could not log the message '${logmessage}' to '${dir}/${PN}.log'"
432 fi
433 fi
434}

Legend:
Removed from v.1.31  
changed lines
  Added in v.1.50

  ViewVC Help
Powered by ViewVC 1.1.20