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

Diff of /eclass/subversion.eclass

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

Revision 1.52 Revision 1.81
1# Copyright 1999-2008 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.52 2008/02/20 22:35:40 zlin 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#
10# Original Author: Akinori Hattori <hattya@gentoo.org> 9# Original Author: Akinori Hattori <hattya@gentoo.org>
11#
12# @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
13# @DESCRIPTION: 11# @DESCRIPTION:
14# The subversion eclass provides functions to fetch, patch and bootstrap 12# The subversion eclass provides functions to fetch, patch and bootstrap
15# software sources from subversion repositories. 13# software sources from subversion repositories.
16 14
17inherit eutils 15inherit eutils
18 16
19ESVN="${ECLASS}" 17ESVN="${ECLASS}"
20 18
19case "${EAPI:-0}" in
20 0|1)
21EXPORT_FUNCTIONS src_unpack pkg_preinst 21 EXPORT_FUNCTIONS src_unpack pkg_preinst
22 ;;
23 *)
24 EXPORT_FUNCTIONS src_unpack src_prepare pkg_preinst
25 ;;
26esac
22 27
23DESCRIPTION="Based on the ${ECLASS} eclass"
24
25DEPEND="dev-util/subversion 28DEPEND="dev-vcs/subversion
26 net-misc/rsync" 29 net-misc/rsync"
27 30
28# @ECLASS-VARIABLE: ESVN_STORE_DIR 31# @ECLASS-VARIABLE: ESVN_STORE_DIR
29# @DESCRIPTION: 32# @DESCRIPTION:
30# 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
74# to a specific revision 77# to a specific revision
75# 78#
76# Note: This should never be set in an ebuild! 79# Note: This should never be set in an ebuild!
77ESVN_REVISION="${ESVN_REVISION:-}" 80ESVN_REVISION="${ESVN_REVISION:-}"
78 81
82# @ECLASS-VARIABLE: ESVN_USER
83# @DESCRIPTION:
84# User name
85ESVN_USER="${ESVN_USER:-}"
86
87# @ECLASS-VARIABLE: ESVN_PASSWORD
88# @DESCRIPTION:
89# Password
90ESVN_PASSWORD="${ESVN_PASSWORD:-}"
91
79# @ECLASS-VARIABLE: ESVN_PROJECT 92# @ECLASS-VARIABLE: ESVN_PROJECT
80# @DESCRIPTION: 93# @DESCRIPTION:
81# project name of your ebuild (= name space) 94# project name of your ebuild (= name space)
82# 95#
83# subversion eclass will check out the subversion repository like: 96# subversion eclass will check out the subversion repository like:
125# @ECLASS-VARIABLE: ESVN_OFFLINE 138# @ECLASS-VARIABLE: ESVN_OFFLINE
126# @DESCRIPTION: 139# @DESCRIPTION:
127# 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
128# 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
129# tree by users. 142# tree by users.
130ESVN_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}}"
131 154
132# @ECLASS-VARIABLE: ESVN_UP_FREQ 155# @ECLASS-VARIABLE: ESVN_UP_FREQ
133# @DESCRIPTION: 156# @DESCRIPTION:
134# 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
135# 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
164 187
165 [[ -n "${ESVN_REVISION}" ]] && revision="${ESVN_REVISION}" 188 [[ -n "${ESVN_REVISION}" ]] && revision="${ESVN_REVISION}"
166 189
167 # check for the protocol 190 # check for the protocol
168 local protocol="${repo_uri%%:*}" 191 local protocol="${repo_uri%%:*}"
169
170 case "${protocol}" in 192 case "${protocol}" in
171 http|https) 193 http|https)
172 if built_with_use dev-util/subversion nowebdav; then 194 if ! built_with_use -o dev-vcs/subversion webdav-neon webdav-serf; then
173 echo 195 echo
174 eerror "In order to emerge this package, you need to" 196 eerror "In order to emerge this package, you need to"
175 eerror "re-emerge subversion with USE=-nowebdav" 197 eerror "reinstall Subversion with support for WebDAV."
198 eerror "Subversion requires either Neon or Serf to support WebDAV."
176 echo 199 echo
177 die "${ESVN}: please run 'USE=-nowebdav emerge subversion'" 200 die "${ESVN}: reinstall Subversion with support for WebDAV."
178 fi 201 fi
179 ;; 202 ;;
180 svn|svn+ssh) 203 svn|svn+ssh)
181 ;; 204 ;;
182 *) 205 *)
185 esac 208 esac
186 209
187 addread "/etc/subversion" 210 addread "/etc/subversion"
188 addwrite "${ESVN_STORE_DIR}" 211 addwrite "${ESVN_STORE_DIR}"
189 212
213 if [[ -n "${ESVN_UMASK}" ]]; then
214 eumask_push "${ESVN_UMASK}"
215 fi
216
190 if [[ ! -d ${ESVN_STORE_DIR} ]]; then 217 if [[ ! -d ${ESVN_STORE_DIR} ]]; then
191 debug-print "${FUNCNAME}: initial checkout. creating subversion directory" 218 debug-print "${FUNCNAME}: initial checkout. creating subversion directory"
192 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}."
193 fi 220 fi
194 221
195 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}"
196 223
197 local wc_path="$(subversion__get_wc_path "${repo_uri}")" 224 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
198 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion" 225 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion"
199 226
200 [[ -n "${revision}" ]] && options="${options} -r ${revision}" 227 [[ -n "${revision}" ]] && options="${options} -r ${revision}"
202 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then 229 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then
203 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please" 230 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please"
204 ewarn "see \${ESVN_REPO_URI}" 231 ewarn "see \${ESVN_REPO_URI}"
205 fi 232 fi
206 233
234 if has_version ">=dev-vcs/subversion-1.6.0"; then
235 options="${options} --config-option=config:auth:password-stores="
236 fi
237
207 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\"" 238 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\""
208 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\"" 239 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\""
209 debug-print "${FUNCNAME}: options = \"${options}\"" 240 debug-print "${FUNCNAME}: options = \"${options}\""
210 241
211 if [[ ! -d ${wc_path}/.svn ]]; then 242 if [[ ! -d ${wc_path}/.svn ]]; then
243 if [[ -n ${ESVN_OFFLINE} ]]; then
244 ewarn "ESVN_OFFLINE cannot be used when there is no existing checkout."
245 fi
212 # first check out 246 # first check out
213 einfo "subversion check out start -->" 247 einfo "subversion check out start -->"
214 einfo " repository: ${repo_uri}${revision:+@}${revision}" 248 einfo " repository: ${repo_uri}${revision:+@}${revision}"
215 249
216 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}" 250 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}"
217 251
218 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}."
219 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}" 253 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}"
254 if [[ -n "${ESVN_USER}" ]]; then
255 ${ESVN_FETCH_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
256 else
220 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch from ${repo_uri}." 257 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
258 fi
221 259
222 elif [[ -n ${ESVN_OFFLINE} ]]; then 260 elif [[ -n ${ESVN_OFFLINE} ]]; then
261 svn upgrade "${wc_path}" &>/dev/null
262 svn cleanup "${wc_path}" &>/dev/null
223 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
224 if [[ -n ${ESVN_REVISION} && ${ESVN_REVISION} != ${ESVN_WC_REVISION} ]]; then 265 if [[ -n ${ESVN_REVISION} && ${ESVN_REVISION} != ${ESVN_WC_REVISION} ]]; then
225 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."
226 fi 267 fi
227 einfo "Fetching disabled: Using existing repository copy" 268 einfo "Fetching disabled: Using existing repository copy at revision ${ESVN_WC_REVISION}."
228 else 269 else
270 svn upgrade "${wc_path}" &>/dev/null
271 svn cleanup "${wc_path}" &>/dev/null
229 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."
230 273
231 local esvn_up_freq= 274 local esvn_up_freq=
232 if [[ -n ${ESVN_UP_FREQ} ]]; then 275 if [[ -n ${ESVN_UP_FREQ} ]]; then
233 if [[ -n ${ESVN_UP_FREQ//[[:digit:]]} ]]; then 276 if [[ -n ${ESVN_UP_FREQ//[[:digit:]]} ]]; then
234 die "${ESVN}: ESVN_UP_FREQ must be an integer value corresponding to the minimum number of hours between svn up." 277 die "${ESVN}: ESVN_UP_FREQ must be an integer value corresponding to the minimum number of hours between svn up."
235 elif [[ -z $(find "${wc_path}/.svn/entries" -mmin "+$((ESVN_UP_FREQ*60))") ]]; then 278 elif [[ -z $(find "${wc_path}/.svn/entries" -mmin "+$((ESVN_UP_FREQ*60))") ]]; then
236 einfo "Fetching disabled since ${ESVN_UP_FREQ} hours hasn't passed since last update." 279 einfo "Fetching disabled since ${ESVN_UP_FREQ} hours has not passed since last update."
280 einfo "Using existing repository copy at revision ${ESVN_WC_REVISION}."
237 esvn_up_freq=no_update 281 esvn_up_freq=no_update
238 fi 282 fi
239 fi 283 fi
240 284
241 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
242 if [[ ${ESVN_WC_URL} != $(subversion__get_repository_uri "${repo_uri}") ]]; then 304 elif [[ ${ESVN_WC_URL} != $(subversion__get_repository_uri "${repo_uri}") ]]; then
243 einfo "suversion switch start -->" 305 einfo "subversion switch start -->"
244 einfo " old repository: ${ESVN_WC_URL}@${ESVN_WC_REVISION}" 306 einfo " old repository: ${ESVN_WC_URL}@${ESVN_WC_REVISION}"
245 einfo " new repository: ${repo_uri}${revision:+@}${revision}" 307 einfo " new repository: ${repo_uri}${revision:+@}${revision}"
246 308
247 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}" 309 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}"
248 310
249 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}" 311 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
312 if [[ -n "${ESVN_USER}" ]]; then
313 ${ESVN_SWITCH_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" ${repo_uri} || die "${ESVN}: can't update ${wc_path} from ${repo_uri}."
314 else
250 ${ESVN_SWITCH_CMD} ${options} ${repo_uri} || die "${ESVN}: can't update from ${repo_uri}" 315 ${ESVN_SWITCH_CMD} ${options} ${repo_uri} || die "${ESVN}: can't update ${wc_path} from ${repo_uri}."
316 fi
251 else 317 else
252 # update working copy 318 # update working copy
253 einfo "subversion update start -->" 319 einfo "subversion update start -->"
254 einfo " repository: ${repo_uri}${revision:+@}${revision}" 320 einfo " repository: ${repo_uri}${revision:+@}${revision}"
255 321
256 debug-print "${FUNCNAME}: ${ESVN_UPDATE_CMD} ${options}" 322 debug-print "${FUNCNAME}: ${ESVN_UPDATE_CMD} ${options}"
257 323
258 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}" 324 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
325 if [[ -n "${ESVN_USER}" ]]; then
326 ${ESVN_UPDATE_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" || die "${ESVN}: can't update ${wc_path} from ${repo_uri}."
327 else
259 ${ESVN_UPDATE_CMD} ${options} || die "${ESVN}: can't update from ${repo_uri}." 328 ${ESVN_UPDATE_CMD} ${options} || die "${ESVN}: can't update ${wc_path} from ${repo_uri}."
329 fi
260 fi 330 fi
261 fi 331 fi
332 fi
333
334 if [[ -n "${ESVN_UMASK}" ]]; then
335 eumask_pop
262 fi 336 fi
263 337
264 einfo " working copy: ${wc_path}" 338 einfo " working copy: ${wc_path}"
265 339
266 if ! has "export" ${ESVN_RESTRICT}; then 340 if ! has "export" ${ESVN_RESTRICT}; then
267 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}" 341 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
268 342
269 local S="${S}/${S_dest}" 343 local S="${S}/${S_dest}"
344 mkdir -p "${S}"
270 345
271 # export to the ${WORKDIR} 346 # export to the ${WORKDIR}
272 #* "svn export" has a bug. see http://bugs.gentoo.org/119236 347 #* "svn export" has a bug. see http://bugs.gentoo.org/119236
273 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}." 348 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}."
274 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}."
275 fi 350 fi
276 351
352 popd >/dev/null
277 echo 353 echo
278} 354}
279 355
280# @FUNCTION: subversion_bootstrap 356# @FUNCTION: subversion_bootstrap
281# @DESCRIPTION: 357# @DESCRIPTION:
286 fi 362 fi
287 363
288 cd "${S}" 364 cd "${S}"
289 365
290 if [[ -n ${ESVN_PATCHES} ]]; then 366 if [[ -n ${ESVN_PATCHES} ]]; then
367 local patch fpatch
291 einfo "apply patches -->" 368 einfo "apply patches -->"
292
293 local patch fpatch
294
295 for patch in ${ESVN_PATCHES}; do 369 for patch in ${ESVN_PATCHES}; do
296 if [[ -f ${patch} ]]; then 370 if [[ -f ${patch} ]]; then
297 epatch "${patch}" 371 epatch "${patch}"
298
299 else 372 else
300 for fpatch in ${FILESDIR}/${patch}; do 373 for fpatch in ${FILESDIR}/${patch}; do
301 if [[ -f ${fpatch} ]]; then 374 if [[ -f ${fpatch} ]]; then
302 epatch "${fpatch}" 375 epatch "${fpatch}"
303
304 else 376 else
305 die "${ESVN}: ${patch} not found" 377 die "${ESVN}: ${patch} not found"
306
307 fi 378 fi
308 done 379 done
309
310 fi 380 fi
311 done 381 done
312
313 echo 382 echo
314 fi 383 fi
315 384
316 if [[ -n ${ESVN_BOOTSTRAP} ]]; then 385 if [[ -n ${ESVN_BOOTSTRAP} ]]; then
317 einfo "begin bootstrap -->" 386 einfo "begin bootstrap -->"
318
319 if [[ -f ${ESVN_BOOTSTRAP} && -x ${ESVN_BOOTSTRAP} ]]; then 387 if [[ -f ${ESVN_BOOTSTRAP} && -x ${ESVN_BOOTSTRAP} ]]; then
320 einfo " bootstrap with a file: ${ESVN_BOOTSTRAP}" 388 einfo " bootstrap with a file: ${ESVN_BOOTSTRAP}"
321 eval "./${ESVN_BOOTSTRAP}" || die "${ESVN}: can't execute ESVN_BOOTSTRAP." 389 eval "./${ESVN_BOOTSTRAP}" || die "${ESVN}: can't execute ESVN_BOOTSTRAP."
322
323 else 390 else
324 einfo " bootstrap with command: ${ESVN_BOOTSTRAP}" 391 einfo " bootstrap with command: ${ESVN_BOOTSTRAP}"
325 eval "${ESVN_BOOTSTRAP}" || die "${ESVN}: can't eval ESVN_BOOTSTRAP." 392 eval "${ESVN_BOOTSTRAP}" || die "${ESVN}: can't eval ESVN_BOOTSTRAP."
326
327 fi
328 fi 393 fi
329} 394 fi
330
331# @FUNCTION: subversion_src_unpack
332# @DESCRIPTION:
333# default src_unpack. fetch and bootstrap.
334subversion_src_unpack() {
335 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch."
336 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
337} 395}
338 396
339# @FUNCTION: subversion_wc_info 397# @FUNCTION: subversion_wc_info
340# @USAGE: [repo_uri] 398# @USAGE: [repo_uri]
341# @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
343# Get svn info for the specified repo_uri. The default repo_uri is ESVN_REPO_URI. 401# Get svn info for the specified repo_uri. The default repo_uri is ESVN_REPO_URI.
344# 402#
345# The working copy information on the specified repository URI are set to 403# The working copy information on the specified repository URI are set to
346# ESVN_WC_* variables. 404# ESVN_WC_* variables.
347subversion_wc_info() { 405subversion_wc_info() {
348 local repo_uri="$(subversion__get_repository_uri "${1}")" 406 local repo_uri="$(subversion__get_repository_uri "${1:-${ESVN_REPO_URI}}")"
349 local wc_path="$(subversion__get_wc_path "${repo_uri}")" 407 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
350 408
351 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}" 409 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
352 debug-print "${FUNCNAME}: wc_path = ${wc_path}" 410 debug-print "${FUNCNAME}: wc_path = ${wc_path}"
353 411
360 export ESVN_WC_UUID="$(subversion__svn_info "${wc_path}" "Repository UUID")" 418 export ESVN_WC_UUID="$(subversion__svn_info "${wc_path}" "Repository UUID")"
361 export ESVN_WC_REVISION="$(subversion__svn_info "${wc_path}" "Revision")" 419 export ESVN_WC_REVISION="$(subversion__svn_info "${wc_path}" "Revision")"
362 export ESVN_WC_PATH="${wc_path}" 420 export ESVN_WC_PATH="${wc_path}"
363} 421}
364 422
365## -- Private Functions 423# @FUNCTION: subversion_src_unpack
366 424# @DESCRIPTION:
367## -- subversion__svn_info() ------------------------------------------------- # 425# Default src_unpack. Fetch and, in older EAPIs, bootstrap.
368# 426subversion_src_unpack() {
369# param $1 - a target. 427 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch."
370# param $2 - a key name. 428 if has "${EAPI:-0}" 0 1; then
371# 429 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
372subversion__svn_info() {
373 local target="${1}"
374 local key="${2}"
375
376 env LC_ALL=C svn info "${target}" | grep -i "^${key}" | cut -d" " -f2-
377}
378
379## -- subversion__get_repository_uri() --------------------------------------- #
380#
381# param $1 - a repository URI.
382subversion__get_repository_uri() {
383 local repo_uri="${1}"
384
385 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
386
387 if [[ -z ${repo_uri} ]]; then
388 die "${ESVN}: ESVN_REPO_URI (or specified URI) is empty."
389 fi 430 fi
390
391 # delete trailing slash
392 if [[ -z ${repo_uri##*/} ]]; then
393 repo_uri="${repo_uri%/}"
394 fi
395
396 repo_uri="${repo_uri%@*}"
397
398 echo "${repo_uri}"
399} 431}
400 432
401## -- subversion__get_wc_path() ---------------------------------------------- # 433# @FUNCTION: subversion_src_prepare
402# 434# @DESCRIPTION:
403# param $1 - a repository URI. 435# Default src_prepare. Bootstrap.
404subversion__get_wc_path() { 436subversion_src_prepare() {
405 local repo_uri="$(subversion__get_repository_uri "${1}")" 437 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
406
407 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
408
409 echo "${ESVN_STORE_DIR}/${ESVN_PROJECT}/${repo_uri##*/}"
410}
411
412## -- subversion__get_peg_revision() ----------------------------------------- #
413#
414# param $1 - a repository URI.
415subversion__get_peg_revision() {
416 local repo_uri="${1}"
417
418 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
419
420 # repo_uri has peg revision ?
421 if [[ ${repo_uri} != *@* ]]; then
422 debug-print "${FUNCNAME}: repo_uri does not have a peg revision."
423 fi
424
425 local peg_rev=
426 [[ ${repo_uri} = *@* ]] && peg_rev="${repo_uri##*@}"
427
428 debug-print "${FUNCNAME}: peg_rev = ${peg_rev}"
429
430 echo "${peg_rev}"
431} 438}
432 439
433# @FUNCTION: subversion_pkg_preinst 440# @FUNCTION: subversion_pkg_preinst
441# @USAGE: [repo_uri]
434# @DESCRIPTION: 442# @DESCRIPTION:
435# 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
436# 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
437# config protection. 445# config protection.
438subversion_pkg_preinst() { 446subversion_pkg_preinst() {
439 local pkgdate=$(date "+%Y%m%d %H:%M:%S") 447 local pkgdate=$(date "+%Y%m%d %H:%M:%S")
440 subversion_wc_info 448 subversion_wc_info "${1}"
441 if [[ -n ${ESCM_LOGDIR} ]]; then 449 if [[ -n ${ESCM_LOGDIR} ]]; then
442 local dir="${ROOT}/${ESCM_LOGDIR}/${CATEGORY}" 450 local dir="${ROOT}/${ESCM_LOGDIR}/${CATEGORY}"
443 if [[ ! -d ${dir} ]]; then 451 if [[ ! -d ${dir} ]]; then
444 mkdir -p "${dir}" || \ 452 mkdir -p "${dir}" || eerror "Failed to create '${dir}' for logging svn revision"
445 eerror "Failed to create '${dir}' for logging svn revision to '${PORTDIR_SCM}'"
446 fi 453 fi
447 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}"
448 if [[ -d ${dir} ]]; then 455 if [[ -d ${dir} ]]; then
449 echo "${logmessage}" >> "${dir}/${PN}.log" 456 echo "${logmessage}" >>"${dir}/${PN}.log"
450 else 457 else
451 eerror "Could not log the message '${logmessage}' to '${dir}/${PN}.log'" 458 eerror "Could not log the message '${logmessage}' to '${dir}/${PN}.log'"
452 fi 459 fi
453 fi 460 fi
454} 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.52  
changed lines
  Added in v.1.81

  ViewVC Help
Powered by ViewVC 1.1.20