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

Diff of /eclass/subversion.eclass

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

Revision 1.48 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.48 2008/02/20 19:18:53 cardoe 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 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:
121# this should be a space delimited list of subversion eclass features to 133# this should be a space delimited list of subversion eclass features to
122# restrict. 134# restrict.
123# export) 135# export)
124# don't export the working copy to S. 136# don't export the working copy to S.
125ESVN_RESTRICT="${ESVN_RESTRICT:-}" 137ESVN_RESTRICT="${ESVN_RESTRICT:-}"
138
139# @ECLASS-VARIABLE: ESVN_OFFLINE
140# @DESCRIPTION:
141# Set this variable to a non-empty value to disable the automatic updating of
142# an svn source tree. This is intended to be set outside the subversion source
143# tree by users.
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:=}"
162
163# @ECLASS-VARIABLE: ESCM_LOGDIR
164# @DESCRIPTION:
165# User configuration variable. If set to a path such as e.g. /var/log/scm any
166# package inheriting from subversion.eclass will record svn revision to
167# ${CATEGORY}/${PN}.log in that path in pkg_preinst. This is not supposed to be
168# set by ebuilds/eclasses. It defaults to empty so users need to opt in.
169ESCM_LOGDIR="${ESCM_LOGDIR:=}"
126 170
127# @FUNCTION: subversion_fetch 171# @FUNCTION: subversion_fetch
128# @USAGE: [repo_uri] [destination] 172# @USAGE: [repo_uri] [destination]
129# @DESCRIPTION: 173# @DESCRIPTION:
130# Wrapper function to fetch sources from subversion via svn checkout or svn update, 174# Wrapper function to fetch sources from subversion via svn checkout or svn update,
136subversion_fetch() { 180subversion_fetch() {
137 local repo_uri="$(subversion__get_repository_uri "${1:-${ESVN_REPO_URI}}")" 181 local repo_uri="$(subversion__get_repository_uri "${1:-${ESVN_REPO_URI}}")"
138 local revision="$(subversion__get_peg_revision "${1:-${ESVN_REPO_URI}}")" 182 local revision="$(subversion__get_peg_revision "${1:-${ESVN_REPO_URI}}")"
139 local S_dest="${2}" 183 local S_dest="${2}"
140 184
185 if [[ -z ${repo_uri} ]]; then
186 die "${ESVN}: ESVN_REPO_URI (or specified URI) is empty."
187 fi
188
141 [[ -n "${ESVN_REVISION}" ]] && revision="${ESVN_REVISION}" 189 [[ -n "${ESVN_REVISION}" ]] && revision="${ESVN_REVISION}"
142 190
143 # check for the protocol 191 # check for the protocol
144 local protocol="${repo_uri%%:*}" 192 local protocol="${repo_uri%%:*}"
145
146 case "${protocol}" in 193 case "${protocol}" in
147 http|https) 194 http|https)
148 if built_with_use dev-util/subversion nowebdav; then
149 echo
150 eerror "In order to emerge this package, you need to"
151 eerror "re-emerge subversion with USE=-nowebdav"
152 echo
153 die "${ESVN}: please run 'USE=-nowebdav emerge subversion'"
154 fi
155 ;; 195 ;;
156 svn|svn+ssh) 196 svn|svn+ssh)
157 ;; 197 ;;
158 *) 198 *)
159 die "${ESVN}: fetch from '${protocol}' is not yet implemented." 199 die "${ESVN}: fetch from '${protocol}' is not yet implemented."
161 esac 201 esac
162 202
163 addread "/etc/subversion" 203 addread "/etc/subversion"
164 addwrite "${ESVN_STORE_DIR}" 204 addwrite "${ESVN_STORE_DIR}"
165 205
206 if [[ -n "${ESVN_UMASK}" ]]; then
207 eumask_push "${ESVN_UMASK}"
208 fi
209
166 if [[ ! -d ${ESVN_STORE_DIR} ]]; then 210 if [[ ! -d ${ESVN_STORE_DIR} ]]; then
167 debug-print "${FUNCNAME}: initial checkout. creating subversion directory" 211 debug-print "${FUNCNAME}: initial checkout. creating subversion directory"
168 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}."
169 fi 213 fi
170 214
171 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}"
172 216
173 local wc_path="$(subversion__get_wc_path "${repo_uri}")" 217 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
174 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion" 218 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion"
175 219
176 [[ -n "${revision}" ]] && options="${options} -r ${revision}" 220 [[ -n "${revision}" ]] && options="${options} -r ${revision}"
178 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then 222 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then
179 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please" 223 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please"
180 ewarn "see \${ESVN_REPO_URI}" 224 ewarn "see \${ESVN_REPO_URI}"
181 fi 225 fi
182 226
227 if has_version ">=dev-vcs/subversion-1.6.0"; then
228 options="${options} --config-option=config:auth:password-stores="
229 fi
230
183 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\"" 231 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\""
184 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\"" 232 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\""
185 debug-print "${FUNCNAME}: options = \"${options}\"" 233 debug-print "${FUNCNAME}: options = \"${options}\""
186 234
187 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
188 # first check out 239 # first check out
189 einfo "subversion check out start -->" 240 einfo "subversion check out start -->"
190 einfo " repository: ${repo_uri}${revision:+@}${revision}" 241 einfo " repository: ${repo_uri}${revision:+@}${revision}"
191 242
192 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}" 243 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}"
193 244
194 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}."
195 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
196 ${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
197 252
253 elif [[ -n ${ESVN_OFFLINE} ]]; then
254 svn upgrade "${wc_path}" &>/dev/null
255 svn cleanup "${wc_path}" &>/dev/null
256 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy."
257
258 if [[ -n ${ESVN_REVISION} && ${ESVN_REVISION} != ${ESVN_WC_REVISION} ]]; then
259 die "${ESVN}: You requested off-line updating and revision ${ESVN_REVISION} but only revision ${ESVN_WC_REVISION} is available locally."
260 fi
261 einfo "Fetching disabled: Using existing repository copy at revision ${ESVN_WC_REVISION}."
198 else 262 else
263 svn upgrade "${wc_path}" &>/dev/null
264 svn cleanup "${wc_path}" &>/dev/null
199 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."
200 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
201 if [[ ${ESVN_WC_URL} != $(subversion__get_repository_uri "${repo_uri}") ]]; then 297 elif [[ ${ESVN_WC_URL} != $(subversion__get_repository_uri "${repo_uri}") ]]; then
202 einfo "suversion switch start -->" 298 einfo "subversion switch start -->"
203 einfo " old repository: ${ESVN_WC_URL}@${ESVN_WC_REVISION}" 299 einfo " old repository: ${ESVN_WC_URL}@${ESVN_WC_REVISION}"
204 einfo " new repository: ${repo_uri}${revision:+@}${revision}" 300 einfo " new repository: ${repo_uri}${revision:+@}${revision}"
205 301
206 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}" 302 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}"
207 303
208 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
209 ${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
210 else 310 else
211 # update working copy 311 # update working copy
212 einfo "subversion update start -->" 312 einfo "subversion update start -->"
213 einfo " repository: ${repo_uri}${revision:+@}${revision}" 313 einfo " repository: ${repo_uri}${revision:+@}${revision}"
214 314
215 debug-print "${FUNCNAME}: ${ESVN_UPDATE_CMD} ${options}" 315 debug-print "${FUNCNAME}: ${ESVN_UPDATE_CMD} ${options}"
216 316
217 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
218 ${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
219 fi 323 fi
324 fi
325 fi
220 326
327 if [[ -n "${ESVN_UMASK}" ]]; then
328 eumask_pop
221 fi 329 fi
222 330
223 einfo " working copy: ${wc_path}" 331 einfo " working copy: ${wc_path}"
224 332
225 if ! has "export" ${ESVN_RESTRICT}; then 333 if ! has "export" ${ESVN_RESTRICT}; then
226 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}" 334 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
227 335
228 local S="${S}/${S_dest}" 336 local S="${S}/${S_dest}"
337 mkdir -p "${S}"
229 338
230 # export to the ${WORKDIR} 339 # export to the ${WORKDIR}
231 #* "svn export" has a bug. see http://bugs.gentoo.org/119236 340 #* "svn export" has a bug. see http://bugs.gentoo.org/119236
232 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}." 341 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}."
233 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}."
234 fi 343 fi
235 344
345 popd >/dev/null
236 echo 346 echo
237} 347}
238 348
239# @FUNCTION: subversion_bootstrap 349# @FUNCTION: subversion_bootstrap
240# @DESCRIPTION: 350# @DESCRIPTION:
245 fi 355 fi
246 356
247 cd "${S}" 357 cd "${S}"
248 358
249 if [[ -n ${ESVN_PATCHES} ]]; then 359 if [[ -n ${ESVN_PATCHES} ]]; then
360 local patch fpatch
250 einfo "apply patches -->" 361 einfo "apply patches -->"
251
252 local patch fpatch
253
254 for patch in ${ESVN_PATCHES}; do 362 for patch in ${ESVN_PATCHES}; do
255 if [[ -f ${patch} ]]; then 363 if [[ -f ${patch} ]]; then
256 epatch "${patch}" 364 epatch "${patch}"
257
258 else 365 else
259 for fpatch in ${FILESDIR}/${patch}; do 366 for fpatch in ${FILESDIR}/${patch}; do
260 if [[ -f ${fpatch} ]]; then 367 if [[ -f ${fpatch} ]]; then
261 epatch "${fpatch}" 368 epatch "${fpatch}"
262
263 else 369 else
264 die "${ESVN}: ${patch} not found" 370 die "${ESVN}: ${patch} not found"
265
266 fi 371 fi
267 done 372 done
268
269 fi 373 fi
270 done 374 done
271
272 echo 375 echo
273 fi 376 fi
274 377
275 if [[ -n ${ESVN_BOOTSTRAP} ]]; then 378 if [[ -n ${ESVN_BOOTSTRAP} ]]; then
276 einfo "begin bootstrap -->" 379 einfo "begin bootstrap -->"
277
278 if [[ -f ${ESVN_BOOTSTRAP} && -x ${ESVN_BOOTSTRAP} ]]; then 380 if [[ -f ${ESVN_BOOTSTRAP} && -x ${ESVN_BOOTSTRAP} ]]; then
279 einfo " bootstrap with a file: ${ESVN_BOOTSTRAP}" 381 einfo " bootstrap with a file: ${ESVN_BOOTSTRAP}"
280 eval "./${ESVN_BOOTSTRAP}" || die "${ESVN}: can't execute ESVN_BOOTSTRAP." 382 eval "./${ESVN_BOOTSTRAP}" || die "${ESVN}: can't execute ESVN_BOOTSTRAP."
281
282 else 383 else
283 einfo " bootstrap with command: ${ESVN_BOOTSTRAP}" 384 einfo " bootstrap with command: ${ESVN_BOOTSTRAP}"
284 eval "${ESVN_BOOTSTRAP}" || die "${ESVN}: can't eval ESVN_BOOTSTRAP." 385 eval "${ESVN_BOOTSTRAP}" || die "${ESVN}: can't eval ESVN_BOOTSTRAP."
285
286 fi
287 fi 386 fi
288} 387 fi
289
290# @FUNCTION: subversion_src_unpack
291# @DESCRIPTION:
292# default src_unpack. fetch and bootstrap.
293subversion_src_unpack() {
294 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch."
295 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
296} 388}
297 389
298# @FUNCTION: subversion_wc_info 390# @FUNCTION: subversion_wc_info
299# @USAGE: [repo_uri] 391# @USAGE: [repo_uri]
300# @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
302# 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.
303# 395#
304# 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
305# ESVN_WC_* variables. 397# ESVN_WC_* variables.
306subversion_wc_info() { 398subversion_wc_info() {
307 local repo_uri="$(subversion__get_repository_uri "${1}")" 399 local repo_uri="$(subversion__get_repository_uri "${1:-${ESVN_REPO_URI}}")"
308 local wc_path="$(subversion__get_wc_path "${repo_uri}")" 400 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
309 401
310 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}" 402 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
311 debug-print "${FUNCNAME}: wc_path = ${wc_path}" 403 debug-print "${FUNCNAME}: wc_path = ${wc_path}"
312 404
319 export ESVN_WC_UUID="$(subversion__svn_info "${wc_path}" "Repository UUID")" 411 export ESVN_WC_UUID="$(subversion__svn_info "${wc_path}" "Repository UUID")"
320 export ESVN_WC_REVISION="$(subversion__svn_info "${wc_path}" "Revision")" 412 export ESVN_WC_REVISION="$(subversion__svn_info "${wc_path}" "Revision")"
321 export ESVN_WC_PATH="${wc_path}" 413 export ESVN_WC_PATH="${wc_path}"
322} 414}
323 415
416# @FUNCTION: subversion_src_unpack
417# @DESCRIPTION:
418# Default src_unpack. Fetch and, in older EAPIs, bootstrap.
419subversion_src_unpack() {
420 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch."
421 if has "${EAPI:-0}" 0 1; then
422 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
423 fi
424}
425
426# @FUNCTION: subversion_src_prepare
427# @DESCRIPTION:
428# Default src_prepare. Bootstrap.
429subversion_src_prepare() {
430 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
431}
432
433# @FUNCTION: subversion_pkg_preinst
434# @USAGE: [repo_uri]
435# @DESCRIPTION:
436# Log the svn revision of source code. Doing this in pkg_preinst because we
437# want the logs to stick around if packages are uninstalled without messing with
438# config protection.
439subversion_pkg_preinst() {
440 local pkgdate=$(date "+%Y%m%d %H:%M:%S")
441 subversion_wc_info "${1}"
442 if [[ -n ${ESCM_LOGDIR} ]]; then
443 local dir="${ROOT}/${ESCM_LOGDIR}/${CATEGORY}"
444 if [[ ! -d ${dir} ]]; then
445 mkdir -p "${dir}" || eerror "Failed to create '${dir}' for logging svn revision"
446 fi
447 local logmessage="svn: ${pkgdate} - ${PF}:${SLOT} was merged at revision ${ESVN_WC_REVISION}"
448 if [[ -d ${dir} ]]; then
449 echo "${logmessage}" >>"${dir}/${PN}.log"
450 else
451 eerror "Could not log the message '${logmessage}' to '${dir}/${PN}.log'"
452 fi
453 fi
454}
455
324## -- Private Functions 456## -- Private Functions
325 457
326## -- subversion__svn_info() ------------------------------------------------- # 458## -- subversion__svn_info() ------------------------------------------------- #
327# 459#
328# param $1 - a target. 460# param $1 - a target.
330# 462#
331subversion__svn_info() { 463subversion__svn_info() {
332 local target="${1}" 464 local target="${1}"
333 local key="${2}" 465 local key="${2}"
334 466
335 env LC_ALL=C svn info "${target}" | grep -i "^${key}" | cut -d" " -f2- 467 env LC_ALL=C svn info ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" "${target}" \
468 | grep -i "^${key}" \
469 | cut -d" " -f2-
336} 470}
337 471
338## -- subversion__get_repository_uri() --------------------------------------- # 472## -- subversion__get_repository_uri() --------------------------------------- #
339# 473#
340# param $1 - a repository URI. 474# param $1 - a repository URI.
341subversion__get_repository_uri() { 475subversion__get_repository_uri() {
342 local repo_uri="${1}" 476 local repo_uri="${1}"
343 477
344 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}" 478 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
345
346 if [[ -z ${repo_uri} ]]; then 479 if [[ -z ${repo_uri} ]]; then
347 die "${ESVN}: ESVN_REPO_URI (or specified URI) is empty." 480 die "${ESVN}: ESVN_REPO_URI (or specified URI) is empty."
348 fi 481 fi
349
350 # delete trailing slash 482 # delete trailing slash
351 if [[ -z ${repo_uri##*/} ]]; then 483 if [[ -z ${repo_uri##*/} ]]; then
352 repo_uri="${repo_uri%/}" 484 repo_uri="${repo_uri%/}"
353 fi 485 fi
354
355 repo_uri="${repo_uri%@*}" 486 repo_uri="${repo_uri%@*}"
356 487
357 echo "${repo_uri}" 488 echo "${repo_uri}"
358} 489}
359 490
371## -- subversion__get_peg_revision() ----------------------------------------- # 502## -- subversion__get_peg_revision() ----------------------------------------- #
372# 503#
373# param $1 - a repository URI. 504# param $1 - a repository URI.
374subversion__get_peg_revision() { 505subversion__get_peg_revision() {
375 local repo_uri="${1}" 506 local repo_uri="${1}"
507 local peg_rev=
376 508
377 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}" 509 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
378
379 # repo_uri has peg revision ? 510 # repo_uri has peg revision?
380 if [[ ${repo_uri} != *@* ]]; then 511 if [[ ${repo_uri} = *@* ]]; then
512 peg_rev="${repo_uri##*@}"
513 debug-print "${FUNCNAME}: peg_rev = ${peg_rev}"
514 else
381 debug-print "${FUNCNAME}: repo_uri does not have a peg revision." 515 debug-print "${FUNCNAME}: repo_uri does not have a peg revision."
382 fi 516 fi
383
384 local peg_rev=
385 [[ ${repo_uri} = *@* ]] && peg_rev="${repo_uri##*@}"
386
387 debug-print "${FUNCNAME}: peg_rev = ${peg_rev}"
388 517
389 echo "${peg_rev}" 518 echo "${peg_rev}"
390} 519}

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

  ViewVC Help
Powered by ViewVC 1.1.20