/[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.73
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.59 2008/05/15 13:27:40 zlin Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/subversion.eclass,v 1.73 2012/02/02 03:17:56 floppym 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:
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:-}"
124 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:-}"
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
129# tree by users. 156# tree by users.
130ESVN_OFFLINE="${ESVN_OFFLINE:-${ESCM_OFFLINE}}" 157ESVN_OFFLINE="${ESVN_OFFLINE:-${ESCM_OFFLINE}}"
158
159# @ECLASS-VARIABLE: ESVN_UMASK
160# @DESCRIPTION:
161# Set this variable to custom umask.
162# This is intended to be set by users.
163ESVN_UMASK="${ESVN_UMASK:-${EVCS_UMASK}}"
131 164
132# @ECLASS-VARIABLE: ESVN_UP_FREQ 165# @ECLASS-VARIABLE: ESVN_UP_FREQ
133# @DESCRIPTION: 166# @DESCRIPTION:
134# Set the minimum number of hours between svn up'ing in any given svn module. This is particularly 167# 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 168# useful for split KDE ebuilds where we want to ensure that all submodules are compiled for the same
167 # check for the protocol 200 # check for the protocol
168 local protocol="${repo_uri%%:*}" 201 local protocol="${repo_uri%%:*}"
169 202
170 case "${protocol}" in 203 case "${protocol}" in
171 http|https) 204 http|https)
172 if ! built_with_use --missing true -o dev-util/subversion webdav-neon webdav-serf || \ 205 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 206 echo
175 eerror "In order to emerge this package, you need to" 207 eerror "In order to emerge this package, you need to"
176 eerror "reinstall Subversion with support for WebDAV." 208 eerror "reinstall Subversion with support for WebDAV."
177 eerror "Subversion requires either Neon or Serf to support WebDAV." 209 eerror "Subversion requires either Neon or Serf to support WebDAV."
178 echo 210 echo
187 esac 219 esac
188 220
189 addread "/etc/subversion" 221 addread "/etc/subversion"
190 addwrite "${ESVN_STORE_DIR}" 222 addwrite "${ESVN_STORE_DIR}"
191 223
224 if [[ -n "${ESVN_UMASK}" ]]; then
225 eumask_push "${ESVN_UMASK}"
226 fi
227
192 if [[ ! -d ${ESVN_STORE_DIR} ]]; then 228 if [[ ! -d ${ESVN_STORE_DIR} ]]; then
193 debug-print "${FUNCNAME}: initial checkout. creating subversion directory" 229 debug-print "${FUNCNAME}: initial checkout. creating subversion directory"
194 mkdir -p "${ESVN_STORE_DIR}" || die "${ESVN}: can't mkdir ${ESVN_STORE_DIR}." 230 mkdir -m 775 -p "${ESVN_STORE_DIR}" || die "${ESVN}: can't mkdir ${ESVN_STORE_DIR}."
195 fi 231 fi
196 232
197 cd "${ESVN_STORE_DIR}" || die "${ESVN}: can't chdir to ${ESVN_STORE_DIR}" 233 pushd "${ESVN_STORE_DIR}" > /dev/null || die "${ESVN}: can't chdir to ${ESVN_STORE_DIR}"
198 234
199 local wc_path="$(subversion__get_wc_path "${repo_uri}")" 235 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
200 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion" 236 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion"
201 237
202 [[ -n "${revision}" ]] && options="${options} -r ${revision}" 238 [[ -n "${revision}" ]] && options="${options} -r ${revision}"
204 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then 240 if [[ "${ESVN_OPTIONS}" = *-r* ]]; then
205 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please" 241 ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please"
206 ewarn "see \${ESVN_REPO_URI}" 242 ewarn "see \${ESVN_REPO_URI}"
207 fi 243 fi
208 244
245 if has_version ">=dev-vcs/subversion-1.6.0"; then
246 options="${options} --config-option=config:auth:password-stores="
247 fi
248
209 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\"" 249 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\""
210 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\"" 250 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\""
211 debug-print "${FUNCNAME}: options = \"${options}\"" 251 debug-print "${FUNCNAME}: options = \"${options}\""
212 252
213 if [[ ! -d ${wc_path}/.svn ]]; then 253 if [[ ! -d ${wc_path}/.svn ]]; then
214 if [[ -n ${ESVN_OFFLINE} ]]; then 254 if [[ -n ${ESVN_OFFLINE} ]]; then
215 ewarn "ESVN_OFFLINE cannot be used when the there is no existing checkout." 255 ewarn "ESVN_OFFLINE cannot be used when there is no existing checkout."
216 fi 256 fi
217 # first check out 257 # first check out
218 einfo "subversion check out start -->" 258 einfo "subversion check out start -->"
219 einfo " repository: ${repo_uri}${revision:+@}${revision}" 259 einfo " repository: ${repo_uri}${revision:+@}${revision}"
220 260
221 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}" 261 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}"
222 262
223 mkdir -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}." 263 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}" 264 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}"
265 if [[ -n "${ESVN_USER}" ]]; then
266 ${ESVN_FETCH_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
267 else
225 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}." 268 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
269 fi
226 270
227 elif [[ -n ${ESVN_OFFLINE} ]]; then 271 elif [[ -n ${ESVN_OFFLINE} ]]; then
272 svn upgrade "${wc_path}" &>/dev/null
273 svn cleanup "${wc_path}" &>/dev/null
228 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy." 274 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 275 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." 276 die "${ESVN}: You requested off-line updating and revision ${ESVN_REVISION} but only revision ${ESVN_WC_REVISION} is available locally."
231 fi 277 fi
232 einfo "Fetching disabled: Using existing repository copy at revision ${ESVN_WC_REVISION}." 278 einfo "Fetching disabled: Using existing repository copy at revision ${ESVN_WC_REVISION}."
233 else 279 else
280 svn upgrade "${wc_path}" &>/dev/null
281 svn cleanup "${wc_path}" &>/dev/null
234 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy." 282 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy."
235 283
236 local esvn_up_freq= 284 local esvn_up_freq=
237 if [[ -n ${ESVN_UP_FREQ} ]]; then 285 if [[ -n ${ESVN_UP_FREQ} ]]; then
238 if [[ -n ${ESVN_UP_FREQ//[[:digit:]]} ]]; then 286 if [[ -n ${ESVN_UP_FREQ//[[:digit:]]} ]]; then
243 esvn_up_freq=no_update 291 esvn_up_freq=no_update
244 fi 292 fi
245 fi 293 fi
246 294
247 if [[ -z ${esvn_up_freq} ]]; then 295 if [[ -z ${esvn_up_freq} ]]; then
296 if [[ ${ESVN_WC_UUID} != $(subversion__svn_info "${repo_uri}" "Repository UUID") ]]; then
297 # UUID mismatch. Delete working copy and check out it again.
298 einfo "subversion recheck out start -->"
299 einfo " old UUID: ${ESVN_WC_UUID}"
300 einfo " new UUID: $(subversion__svn_info "${repo_uri}" "Repository UUID")"
301 einfo " repository: ${repo_uri}${revision:+@}${revision}"
302
303 rm -fr "${ESVN_PROJECT}" || die
304
305 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}"
306
307 mkdir -m 775 -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}."
308 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}"
309 if [[ -n "${ESVN_USER}" ]]; then
310 ${ESVN_FETCH_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
311 else
312 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
313 fi
248 if [[ ${ESVN_WC_URL} != $(subversion__get_repository_uri "${repo_uri}") ]]; then 314 elif [[ ${ESVN_WC_URL} != $(subversion__get_repository_uri "${repo_uri}") ]]; then
249 einfo "subversion switch start -->" 315 einfo "subversion switch start -->"
250 einfo " old repository: ${ESVN_WC_URL}@${ESVN_WC_REVISION}" 316 einfo " old repository: ${ESVN_WC_URL}@${ESVN_WC_REVISION}"
251 einfo " new repository: ${repo_uri}${revision:+@}${revision}" 317 einfo " new repository: ${repo_uri}${revision:+@}${revision}"
252 318
253 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}" 319 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}"
254 320
255 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}" 321 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
322 if [[ -n "${ESVN_USER}" ]]; then
323 ${ESVN_SWITCH_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" ${repo_uri} || die "${ESVN}: can't update ${wc_path} from ${repo_uri}."
324 else
256 ${ESVN_SWITCH_CMD} ${options} ${repo_uri} || die "${ESVN}: can't update ${wc_path} from ${repo_uri}" 325 ${ESVN_SWITCH_CMD} ${options} ${repo_uri} || die "${ESVN}: can't update ${wc_path} from ${repo_uri}."
326 fi
257 else 327 else
258 # update working copy 328 # update working copy
259 einfo "subversion update start -->" 329 einfo "subversion update start -->"
260 einfo " repository: ${repo_uri}${revision:+@}${revision}" 330 einfo " repository: ${repo_uri}${revision:+@}${revision}"
261 331
262 debug-print "${FUNCNAME}: ${ESVN_UPDATE_CMD} ${options}" 332 debug-print "${FUNCNAME}: ${ESVN_UPDATE_CMD} ${options}"
263 333
264 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}" 334 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
335 if [[ -n "${ESVN_USER}" ]]; then
336 ${ESVN_UPDATE_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" || die "${ESVN}: can't update ${wc_path} from ${repo_uri}."
337 else
265 ${ESVN_UPDATE_CMD} ${options} || die "${ESVN}: can't update ${wc_path} from ${repo_uri}." 338 ${ESVN_UPDATE_CMD} ${options} || die "${ESVN}: can't update ${wc_path} from ${repo_uri}."
339 fi
266 fi 340 fi
267 fi 341 fi
342 fi
343
344 if [[ -n "${ESVN_UMASK}" ]]; then
345 eumask_pop
268 fi 346 fi
269 347
270 einfo " working copy: ${wc_path}" 348 einfo " working copy: ${wc_path}"
271 349
272 if ! has "export" ${ESVN_RESTRICT}; then 350 if ! has "export" ${ESVN_RESTRICT}; then
273 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}" 351 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
274 352
275 local S="${S}/${S_dest}" 353 local S="${S}/${S_dest}"
354 mkdir -p "${S}"
276 355
277 # export to the ${WORKDIR} 356 # export to the ${WORKDIR}
278 #* "svn export" has a bug. see http://bugs.gentoo.org/119236 357 #* "svn export" has a bug. see http://bugs.gentoo.org/119236
279 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}." 358 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}."
280 rsync -rlpgo --exclude=".svn/" . "${S}" || die "${ESVN}: can't export to ${S}." 359 rsync -rlpgo --exclude=".svn/" . "${S}" || die "${ESVN}: can't export to ${S}."
281 fi 360 fi
282 361
362 popd > /dev/null
363
283 echo 364 echo
284} 365}
285 366
286# @FUNCTION: subversion_bootstrap 367# @FUNCTION: subversion_bootstrap
287# @DESCRIPTION: 368# @DESCRIPTION:
334 fi 415 fi
335} 416}
336 417
337# @FUNCTION: subversion_src_unpack 418# @FUNCTION: subversion_src_unpack
338# @DESCRIPTION: 419# @DESCRIPTION:
339# default src_unpack. fetch and bootstrap. 420# Default src_unpack. Fetch and, in older EAPIs, bootstrap.
340subversion_src_unpack() { 421subversion_src_unpack() {
341 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch." 422 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch."
423 if has "${EAPI:-0}" 0 1; then
424 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
425 fi
426}
427
428# @FUNCTION: subversion_src_prepare
429# @DESCRIPTION:
430# Default src_prepare. Bootstrap.
431subversion_src_prepare() {
342 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap." 432 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
343} 433}
344 434
345# @FUNCTION: subversion_wc_info 435# @FUNCTION: subversion_wc_info
346# @USAGE: [repo_uri] 436# @USAGE: [repo_uri]

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

  ViewVC Help
Powered by ViewVC 1.1.20