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

Diff of /eclass/subversion.eclass

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

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

  ViewVC Help
Powered by ViewVC 1.1.20