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

Diff of /eclass/subversion.eclass

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

Revision 1.59 Revision 1.72
1# Copyright 1999-2008 Gentoo Foundation 1# Copyright 1999-2011 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.59 2008/05/15 13:27:40 zlin Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/subversion.eclass,v 1.72 2011/12/27 22:40:50 neurogeek 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# Bo ├śrsted Andresen <zlin@gentoo.org>
9# 9# Arfrever Frehtes Taifersar Arahesis <arfrever@gentoo.org>
10# @AUTHOR:
10# Original Author: Akinori Hattori <hattya@gentoo.org> 11# Original Author: Akinori Hattori <hattya@gentoo.org>
11#
12# @BLURB: The subversion eclass is written to fetch software sources from subversion repositories 12# @BLURB: The subversion eclass is written to fetch software sources from subversion repositories
13# @DESCRIPTION: 13# @DESCRIPTION:
14# The subversion eclass provides functions to fetch, patch and bootstrap 14# The subversion eclass provides functions to fetch, patch and bootstrap
15# software sources from subversion repositories. 15# software sources from subversion repositories.
16 16
17inherit eutils 17inherit eutils
18 18
19ESVN="${ECLASS}" 19ESVN="${ECLASS}"
20 20
21case "${EAPI:-0}" in
22 0|1)
21EXPORT_FUNCTIONS src_unpack pkg_preinst 23 EXPORT_FUNCTIONS src_unpack pkg_preinst
24 ;;
25 *)
26 EXPORT_FUNCTIONS src_unpack src_prepare pkg_preinst
27 ;;
28esac
22 29
23DESCRIPTION="Based on the ${ECLASS} eclass" 30DESCRIPTION="Based on the ${ECLASS} eclass"
24 31
25DEPEND="dev-util/subversion 32SUBVERSION_DEPEND="dev-vcs/subversion
26 net-misc/rsync" 33 net-misc/rsync"
34
35if [[ -z "${ESVN_DISABLE_DEPENDENCIES}" ]]; then
36 DEPEND="${SUBVERSION_DEPEND}"
37fi
27 38
28# @ECLASS-VARIABLE: ESVN_STORE_DIR 39# @ECLASS-VARIABLE: ESVN_STORE_DIR
29# @DESCRIPTION: 40# @DESCRIPTION:
30# subversion sources store directory. Users may override this in /etc/make.conf 41# subversion sources store directory. Users may override this in /etc/make.conf
31[[ -z ${ESVN_STORE_DIR} ]] && ESVN_STORE_DIR="${PORTAGE_ACTUAL_DISTDIR:-${DISTDIR}}/svn-src" 42[[ -z ${ESVN_STORE_DIR} ]] && ESVN_STORE_DIR="${PORTAGE_ACTUAL_DISTDIR:-${DISTDIR}}/svn-src"
74# to a specific revision 85# to a specific revision
75# 86#
76# Note: This should never be set in an ebuild! 87# Note: This should never be set in an ebuild!
77ESVN_REVISION="${ESVN_REVISION:-}" 88ESVN_REVISION="${ESVN_REVISION:-}"
78 89
90# @ECLASS-VARIABLE: ESVN_USER
91# @DESCRIPTION:
92# User name
93ESVN_USER="${ESVN_USER:-}"
94
95# @ECLASS-VARIABLE: ESVN_PASSWORD
96# @DESCRIPTION:
97# Password
98ESVN_PASSWORD="${ESVN_PASSWORD:-}"
99
79# @ECLASS-VARIABLE: ESVN_PROJECT 100# @ECLASS-VARIABLE: ESVN_PROJECT
80# @DESCRIPTION: 101# @DESCRIPTION:
81# project name of your ebuild (= name space) 102# project name of your ebuild (= name space)
82# 103#
83# subversion eclass will check out the subversion repository like: 104# subversion eclass will check out the subversion repository like:
119# this should be a space delimited list of subversion eclass features to 140# this should be a space delimited list of subversion eclass features to
120# restrict. 141# restrict.
121# export) 142# export)
122# don't export the working copy to S. 143# don't export the working copy to S.
123ESVN_RESTRICT="${ESVN_RESTRICT:-}" 144ESVN_RESTRICT="${ESVN_RESTRICT:-}"
145
146# @ECLASS-VARIABLE: ESVN_DISABLE_DEPENDENCIES
147# @DESCRIPTION:
148# Set this variable to a non-empty value to disable the automatic inclusion of
149# Subversion in dependencies.
150ESVN_DISABLE_DEPENDENCIES="${ESVN_DISABLE_DEPENDENCIES:-}"
124 151
125# @ECLASS-VARIABLE: ESVN_OFFLINE 152# @ECLASS-VARIABLE: ESVN_OFFLINE
126# @DESCRIPTION: 153# @DESCRIPTION:
127# Set this variable to a non-empty value to disable the automatic updating of 154# 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 155# an svn source tree. This is intended to be set outside the subversion source
167 # check for the protocol 194 # check for the protocol
168 local protocol="${repo_uri%%:*}" 195 local protocol="${repo_uri%%:*}"
169 196
170 case "${protocol}" in 197 case "${protocol}" in
171 http|https) 198 http|https)
172 if ! built_with_use --missing true -o dev-util/subversion webdav-neon webdav-serf || \ 199 if ! built_with_use -o dev-vcs/subversion webdav-neon webdav-serf; then
173 built_with_use --missing false dev-util/subversion nowebdav ; then
174 echo 200 echo
175 eerror "In order to emerge this package, you need to" 201 eerror "In order to emerge this package, you need to"
176 eerror "reinstall Subversion with support for WebDAV." 202 eerror "reinstall Subversion with support for WebDAV."
177 eerror "Subversion requires either Neon or Serf to support WebDAV." 203 eerror "Subversion requires either Neon or Serf to support WebDAV."
178 echo 204 echo
189 addread "/etc/subversion" 215 addread "/etc/subversion"
190 addwrite "${ESVN_STORE_DIR}" 216 addwrite "${ESVN_STORE_DIR}"
191 217
192 if [[ ! -d ${ESVN_STORE_DIR} ]]; then 218 if [[ ! -d ${ESVN_STORE_DIR} ]]; then
193 debug-print "${FUNCNAME}: initial checkout. creating subversion directory" 219 debug-print "${FUNCNAME}: initial checkout. creating subversion directory"
194 mkdir -p "${ESVN_STORE_DIR}" || die "${ESVN}: can't mkdir ${ESVN_STORE_DIR}." 220 mkdir -m 775 -p "${ESVN_STORE_DIR}" || die "${ESVN}: can't mkdir ${ESVN_STORE_DIR}."
195 fi 221 fi
196 222
197 cd "${ESVN_STORE_DIR}" || die "${ESVN}: can't chdir to ${ESVN_STORE_DIR}" 223 pushd "${ESVN_STORE_DIR}" > /dev/null || die "${ESVN}: can't chdir to ${ESVN_STORE_DIR}"
198 224
199 local wc_path="$(subversion__get_wc_path "${repo_uri}")" 225 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
200 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion" 226 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion"
201 227
202 [[ -n "${revision}" ]] && options="${options} -r ${revision}" 228 [[ -n "${revision}" ]] && options="${options} -r ${revision}"
204 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then 230 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then
205 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please" 231 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please"
206 ewarn "see \${ESVN_REPO_URI}" 232 ewarn "see \${ESVN_REPO_URI}"
207 fi 233 fi
208 234
235 if has_version ">=dev-vcs/subversion-1.6.0"; then
236 options="${options} --config-option=config:auth:password-stores="
237 fi
238
209 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\"" 239 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\""
210 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\"" 240 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\""
211 debug-print "${FUNCNAME}: options = \"${options}\"" 241 debug-print "${FUNCNAME}: options = \"${options}\""
212 242
213 if [[ ! -d ${wc_path}/.svn ]]; then 243 if [[ ! -d ${wc_path}/.svn ]]; then
214 if [[ -n ${ESVN_OFFLINE} ]]; then 244 if [[ -n ${ESVN_OFFLINE} ]]; then
215 ewarn "ESVN_OFFLINE cannot be used when the there is no existing checkout." 245 ewarn "ESVN_OFFLINE cannot be used when there is no existing checkout."
216 fi 246 fi
217 # first check out 247 # first check out
218 einfo "subversion check out start -->" 248 einfo "subversion check out start -->"
219 einfo " repository: ${repo_uri}${revision:+@}${revision}" 249 einfo " repository: ${repo_uri}${revision:+@}${revision}"
220 250
221 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}" 251 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}"
222 252
223 mkdir -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}." 253 mkdir -m 775 -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}."
224 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}" 254 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}"
255 if [[ -n "${ESVN_USER}" ]]; then
256 ${ESVN_FETCH_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
257 else
225 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}." 258 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
259 fi
226 260
227 elif [[ -n ${ESVN_OFFLINE} ]]; then 261 elif [[ -n ${ESVN_OFFLINE} ]]; then
262 svn upgrade "${wc_path}" &>/dev/null
263 svn cleanup "${wc_path}" &>/dev/null
228 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy." 264 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy."
229 if [[ -n ${ESVN_REVISION} && ${ESVN_REVISION} != ${ESVN_WC_REVISION} ]]; then 265 if [[ -n ${ESVN_REVISION} && ${ESVN_REVISION} != ${ESVN_WC_REVISION} ]]; then
230 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."
231 fi 267 fi
232 einfo "Fetching disabled: Using existing repository copy at revision ${ESVN_WC_REVISION}." 268 einfo "Fetching disabled: Using existing repository copy at revision ${ESVN_WC_REVISION}."
233 else 269 else
270 svn upgrade "${wc_path}" &>/dev/null
271 svn cleanup "${wc_path}" &>/dev/null
234 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."
235 273
236 local esvn_up_freq= 274 local esvn_up_freq=
237 if [[ -n ${ESVN_UP_FREQ} ]]; then 275 if [[ -n ${ESVN_UP_FREQ} ]]; then
238 if [[ -n ${ESVN_UP_FREQ//[[:digit:]]} ]]; then 276 if [[ -n ${ESVN_UP_FREQ//[[:digit:]]} ]]; then
243 esvn_up_freq=no_update 281 esvn_up_freq=no_update
244 fi 282 fi
245 fi 283 fi
246 284
247 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
248 if [[ ${ESVN_WC_URL} != $(subversion__get_repository_uri "${repo_uri}") ]]; then 304 elif [[ ${ESVN_WC_URL} != $(subversion__get_repository_uri "${repo_uri}") ]]; then
249 einfo "subversion switch start -->" 305 einfo "subversion switch start -->"
250 einfo " old repository: ${ESVN_WC_URL}@${ESVN_WC_REVISION}" 306 einfo " old repository: ${ESVN_WC_URL}@${ESVN_WC_REVISION}"
251 einfo " new repository: ${repo_uri}${revision:+@}${revision}" 307 einfo " new repository: ${repo_uri}${revision:+@}${revision}"
252 308
253 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}" 309 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}"
254 310
255 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
256 ${ESVN_SWITCH_CMD} ${options} ${repo_uri} || die "${ESVN}: can't update ${wc_path} from ${repo_uri}" 315 ${ESVN_SWITCH_CMD} ${options} ${repo_uri} || die "${ESVN}: can't update ${wc_path} from ${repo_uri}."
316 fi
257 else 317 else
258 # update working copy 318 # update working copy
259 einfo "subversion update start -->" 319 einfo "subversion update start -->"
260 einfo " repository: ${repo_uri}${revision:+@}${revision}" 320 einfo " repository: ${repo_uri}${revision:+@}${revision}"
261 321
262 debug-print "${FUNCNAME}: ${ESVN_UPDATE_CMD} ${options}" 322 debug-print "${FUNCNAME}: ${ESVN_UPDATE_CMD} ${options}"
263 323
264 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
265 ${ESVN_UPDATE_CMD} ${options} || die "${ESVN}: can't update ${wc_path} from ${repo_uri}." 328 ${ESVN_UPDATE_CMD} ${options} || die "${ESVN}: can't update ${wc_path} from ${repo_uri}."
329 fi
266 fi 330 fi
267 fi 331 fi
268 fi 332 fi
269 333
270 einfo " working copy: ${wc_path}" 334 einfo " working copy: ${wc_path}"
271 335
272 if ! has "export" ${ESVN_RESTRICT}; then 336 if ! has "export" ${ESVN_RESTRICT}; then
273 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}" 337 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
274 338
275 local S="${S}/${S_dest}" 339 local S="${S}/${S_dest}"
340 mkdir -p "${S}"
276 341
277 # export to the ${WORKDIR} 342 # export to the ${WORKDIR}
278 #* "svn export" has a bug. see http://bugs.gentoo.org/119236 343 #* "svn export" has a bug. see http://bugs.gentoo.org/119236
279 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}." 344 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}."
280 rsync -rlpgo --exclude=".svn/" . "${S}" || die "${ESVN}: can't export to ${S}." 345 rsync -rlpgo --exclude=".svn/" . "${S}" || die "${ESVN}: can't export to ${S}."
281 fi 346 fi
282 347
348 popd > /dev/null
349
283 echo 350 echo
284} 351}
285 352
286# @FUNCTION: subversion_bootstrap 353# @FUNCTION: subversion_bootstrap
287# @DESCRIPTION: 354# @DESCRIPTION:
334 fi 401 fi
335} 402}
336 403
337# @FUNCTION: subversion_src_unpack 404# @FUNCTION: subversion_src_unpack
338# @DESCRIPTION: 405# @DESCRIPTION:
339# default src_unpack. fetch and bootstrap. 406# Default src_unpack. Fetch and, in older EAPIs, bootstrap.
340subversion_src_unpack() { 407subversion_src_unpack() {
341 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch." 408 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch."
409 if has "${EAPI:-0}" 0 1; then
410 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
411 fi
412}
413
414# @FUNCTION: subversion_src_prepare
415# @DESCRIPTION:
416# Default src_prepare. Bootstrap.
417subversion_src_prepare() {
342 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap." 418 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
343} 419}
344 420
345# @FUNCTION: subversion_wc_info 421# @FUNCTION: subversion_wc_info
346# @USAGE: [repo_uri] 422# @USAGE: [repo_uri]

Legend:
Removed from v.1.59  
changed lines
  Added in v.1.72

  ViewVC Help
Powered by ViewVC 1.1.20