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

Diff of /eclass/subversion.eclass

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

Revision 1.39 Revision 1.44
1# Copyright 1999-2007 Gentoo Foundation 1# Copyright 1999-2007 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.39 2007/01/19 10:39:51 hattya Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/subversion.eclass,v 1.44 2007/07/03 08:27:40 peper Exp $
4 4
5## --------------------------------------------------------------------------- # 5## --------------------------------------------------------------------------- #
6# Author: Akinori Hattori <hattya@gentoo.org> 6# Author: Akinori Hattori <hattya@gentoo.org>
7# 7#
8# The subversion eclass is written to fetch the software sources from 8# The subversion eclass is written to fetch the software sources from
19 19
20ESVN="subversion.eclass" 20ESVN="subversion.eclass"
21 21
22EXPORT_FUNCTIONS src_unpack 22EXPORT_FUNCTIONS src_unpack
23 23
24HOMEPAGE="http://subversion.tigris.org/"
25DESCRIPTION="Based on the ${ECLASS} eclass" 24DESCRIPTION="Based on the ${ECLASS} eclass"
26 25
27 26
28## -- add subversion in DEPEND 27## -- add subversion in DEPEND
29# 28#
46 45
47## -- ESVN_OPTIONS: 46## -- ESVN_OPTIONS:
48# 47#
49# the options passed to checkout or update. 48# the options passed to checkout or update.
50# 49#
51: ESVN_OPTIONS=${ESVN_OPTIONS:=} 50: ${ESVN_OPTIONS=}
52 51
53 52
54## -- ESVN_REPO_URI: repository uri 53## -- ESVN_REPO_URI: repository uri
55# 54#
56# e.g. http://foo/trunk, svn://bar/trunk 55# e.g. http://foo/trunk, svn://bar/trunk
59# http:// 58# http://
60# https:// 59# https://
61# svn:// 60# svn://
62# svn+ssh:// 61# svn+ssh://
63# 62#
64: ESVN_REPO_URI=${ESVN_REPO_URI:=} 63: ${ESVN_REPO_URI=}
65 64
66 65
67## -- ESVN_PROJECT: project name of your ebuild (= name space) 66## -- ESVN_PROJECT: project name of your ebuild (= name space)
68# 67#
69# subversion eclass will check out the subversion repository like: 68# subversion eclass will check out the subversion repository like:
82# # jakarta commons-loggin 81# # jakarta commons-loggin
83# ESVN_PROJECT=commons/logging 82# ESVN_PROJECT=commons/logging
84# 83#
85# default: ${PN/-svn}. 84# default: ${PN/-svn}.
86# 85#
87: ESVN_PROJECT=${ESVN_PROJECT:=${PN/-svn}} 86: ${ESVN_PROJECT:=${PN/-svn}}
88 87
89 88
90## -- ESVN_BOOTSTRAP: 89## -- ESVN_BOOTSTRAP:
91# 90#
92# bootstrap script or command like autogen.sh or etc.. 91# bootstrap script or command like autogen.sh or etc..
93# 92#
94: ESVN_BOOTSTRAP=${ESVN_BOOTSTRAP:=} 93: ${ESVN_BOOTSTRAP=}
95 94
96 95
97## -- ESVN_PATCHES: 96## -- ESVN_PATCHES:
98# 97#
99# subversion eclass can apply pathces in subversion_bootstrap(). 98# subversion eclass can apply pathces in subversion_bootstrap().
100# you can use regexp in this valiable like *.diff or *.patch or etc. 99# you can use regexp in this variable like *.diff or *.patch or etc.
101# NOTE: this patches will apply before eval ESVN_BOOTSTRAP. 100# NOTE: patches will be applied before ESVN_BOOTSTRAP is processed.
102# 101#
103# the process of applying the patch is: 102# Patches are searched both in / and ${FILESDIR}, if not found in both locations,
104# 1. just epatch it, if the patch exists in the path. 103# the installation dies.
105# 2. scan it under FILESDIR and epatch it, if the patch exists in FILESDIR.
106# 3. die.
107# 104#
108: ESVN_PATCHES=${ESVN_PATCHES:=} 105: ${ESVN_PATCHES=}
109 106
110 107
111## -- ESVN_RESTRICT: 108## -- ESVN_RESTRICT:
112# 109#
113# this should be a space delimited list of subversion eclass features to 110# this should be a space delimited list of subversion eclass features to
114# restrict. 111# restrict.
115# export) 112# export)
116# don't export the working copy to S. 113# don't export the working copy to S.
117# 114#
118: ESVN_RESTRICT=${ESVN_RESTRICT:=} 115: ${ESVN_RESTRICT=}
119 116
120 117
121## -- subversion_fetch() ----------------------------------------------------- # 118## -- subversion_fetch() ----------------------------------------------------- #
122# 119#
123# @param $1 - a repository URI. default is the ESVN_REPO_URI. 120# @param $1 - a repository URI. default is the ESVN_REPO_URI.
121# @param $2 - a check out path in S.
124# 122#
125function subversion_fetch() { 123function subversion_fetch() {
126
127 local repo_uri="$(subversion__get_repository_uri "${1}")" 124 local repo_uri="$(subversion__get_repository_uri "${1}")"
128 local S_dest="${2}" 125 local S_dest="${2}"
129 126
130 # check for the protocol 127 # check for the protocol
131 local protocol="${repo_uri%%:*}" 128 local protocol="${repo_uri%%:*}"
145 *) 142 *)
146 die "${ESVN}: fetch from "${protocol}" is not yet implemented." 143 die "${ESVN}: fetch from "${protocol}" is not yet implemented."
147 ;; 144 ;;
148 esac 145 esac
149 146
150 # every time
151 addread "/etc/subversion" 147 addread "/etc/subversion"
152 addwrite "${ESVN_STORE_DIR}" 148 addwrite "${ESVN_STORE_DIR}"
153 149
154 if [[ ! -d "${ESVN_STORE_DIR}" ]]; then 150 if [[ ! -d "${ESVN_STORE_DIR}" ]]; then
155 debug-print "${FUNCNAME}: initial checkout. creating subversion directory" 151 debug-print "${FUNCNAME}: initial checkout. creating subversion directory"
174 170
175 mkdir -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}." 171 mkdir -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}."
176 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}" 172 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}"
177 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch from ${repo_uri}." 173 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch from ${repo_uri}."
178 174
175 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy."
179 else 176 else
180 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy." 177 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy."
181
182 if [ "${ESVN_WC_URL}" != "$(subversion__get_repository_uri "${repo_uri}" 1)" ]; then 178 if [ "${ESVN_WC_URL}" != "$(subversion__get_repository_uri "${repo_uri}" 1)" ]; then
183 die "${ESVN}: ESVN_REPO_URI (or specified URI) and working copy's URL are not matched." 179 die "${ESVN}: ESVN_REPO_URI (or specified URI) and working copy's URL are not matched."
184 fi 180 fi
185 181
186 # update working copy 182 # update working copy
189 185
190 debug-print "${FUNCNAME}: ${ESVN_UPDATE_CMD} ${options}" 186 debug-print "${FUNCNAME}: ${ESVN_UPDATE_CMD} ${options}"
191 187
192 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}" 188 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
193 ${ESVN_UPDATE_CMD} ${options} || die "${ESVN}: can't update from ${repo_uri}." 189 ${ESVN_UPDATE_CMD} ${options} || die "${ESVN}: can't update from ${repo_uri}."
194
195 fi 190 fi
196 191
197 einfo " working copy: ${wc_path}" 192 einfo " working copy: ${wc_path}"
198 193
199 if ! has "export" ${ESVN_RESTRICT}; then 194 if ! has "export" ${ESVN_RESTRICT}; then
206 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}." 201 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}."
207 rsync -rlpgo --exclude=".svn/" . "${S}" || die "${ESVN}: can't export to ${S}." 202 rsync -rlpgo --exclude=".svn/" . "${S}" || die "${ESVN}: can't export to ${S}."
208 fi 203 fi
209 204
210 echo 205 echo
211
212} 206}
213 207
214 208
215## -- subversion_bootstrap() ------------------------------------------------ # 209## -- subversion_bootstrap() ------------------------------------------------ #
216# 210#
217function subversion_bootstrap() { 211function subversion_bootstrap() {
218
219 if has "export" ${ESVN_RESTRICT}; then 212 if has "export" ${ESVN_RESTRICT}; then
220 return 213 return
221 fi 214 fi
222 215
223 cd "${S}" 216 cd "${S}"
224 217
225 if [[ -n "${ESVN_PATCHES}" ]]; then 218 if [[ -n "${ESVN_PATCHES}" ]]; then
226 einfo "apply patches -->" 219 einfo "apply patches -->"
227 220
228 local p= 221 local patch fpatch
229
230 for p in ${ESVN_PATCHES}; do 222 for patch in ${ESVN_PATCHES}; do
231 if [[ -f "${p}" ]]; then 223 if [[ -f "${patch}" ]]; then
232 epatch "${p}" 224 epatch "${patch}"
233
234 else 225 else
235 local q=
236
237 for q in ${FILESDIR}/${p}; do 226 for fpatch in ${FILESDIR}/${patch}; do
238 if [[ -f "${q}" ]]; then 227 if [[ -f "${fpatch}" ]]; then
239 epatch "${q}" 228 epatch "${fpatch}"
240
241 else 229 else
242 die "${ESVN}; ${p} is not found" 230 die "${ESVN}: ${patch} not found"
243
244 fi 231 fi
245 done 232 done
246 fi 233 fi
247 done 234 done
248
249 echo 235 echo
250
251 fi 236 fi
252 237
253 if [[ -n "${ESVN_BOOTSTRAP}" ]]; then 238 if [[ -n "${ESVN_BOOTSTRAP}" ]]; then
254 einfo "begin bootstrap -->" 239 einfo "begin bootstrap -->"
255 240
256 if [[ -f "${ESVN_BOOTSTRAP}" && -x "${ESVN_BOOTSTRAP}" ]]; then 241 if [[ -f "${ESVN_BOOTSTRAP}" && -x "${ESVN_BOOTSTRAP}" ]]; then
257 einfo " bootstrap with a file: ${ESVN_BOOTSTRAP}" 242 einfo " bootstrap with a file: ${ESVN_BOOTSTRAP}"
258 eval "./${ESVN_BOOTSTRAP}" || die "${ESVN}: can't execute ESVN_BOOTSTRAP." 243 eval "./${ESVN_BOOTSTRAP}" || die "${ESVN}: can't execute ESVN_BOOTSTRAP."
259
260 else 244 else
261 einfo " bootstrap with commands: ${ESVN_BOOTSTRAP}" 245 einfo " bootstrap with command: ${ESVN_BOOTSTRAP}"
262 eval "${ESVN_BOOTSTRAP}" || die "${ESVN}: can't eval ESVN_BOOTSTRAP." 246 eval "${ESVN_BOOTSTRAP}" || die "${ESVN}: can't eval ESVN_BOOTSTRAP."
263
264 fi 247 fi
265 fi 248 fi
266
267} 249}
268
269 250
270## -- subversion_src_unpack() ------------------------------------------------ # 251## -- subversion_src_unpack() ------------------------------------------------ #
271# 252#
272function subversion_src_unpack() { 253function subversion_src_unpack() {
273
274 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch." 254 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch."
275 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap." 255 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
276
277} 256}
278 257
279 258
280## -- subversion_wc_info() --------------------------------------------------- # 259## -- subversion_wc_info() --------------------------------------------------- #
281# 260#
282# @param $1 - repository URI. default is ESVN_REPO_URI. 261# @param $1 - repository URI. default is ESVN_REPO_URI.
283# 262#
284function subversion_wc_info() { 263function subversion_wc_info() {
285
286 local repo_uri="$(subversion__get_repository_uri "${1}")" 264 local repo_uri="$(subversion__get_repository_uri "${1}")"
287 local wc_path="$(subversion__get_wc_path "${repo_uri}")" 265 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
288 266
289 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}" 267 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
290 debug-print "${FUNCNAME}: wc_path = ${wc_path}" 268 debug-print "${FUNCNAME}: wc_path = ${wc_path}"
292 if [[ ! -e "${wc_path}" ]]; then 270 if [[ ! -e "${wc_path}" ]]; then
293 return 1 271 return 1
294 fi 272 fi
295 273
296 local k 274 local k
297
298 for k in url revision; do 275 for k in url revision; do
299 export ESVN_WC_$(echo "${k}" | tr "[a-z]" "[A-Z]")="$(subversion__svn_info "${wc_path}" "${k}")" 276 export ESVN_WC_$(subversion__to_upper_case "${k}")="$(subversion__svn_info "${wc_path}" "${k}")"
300 done 277 done
301
302} 278}
303
304 279
305## -- Private Functions 280## -- Private Functions
306 281
307 282
308## -- subversion__svn_info() ------------------------------------------------- # 283## -- subversion__svn_info() ------------------------------------------------- #
309# 284#
310# @param $1 - a target. 285# @param $1 - a target.
311# @param $2 - a key name. 286# @param $2 - a key name.
312# 287#
313function subversion__svn_info() { 288function subversion__svn_info() {
314
315 local target="${1}" 289 local target="${1}"
316 local key="${2}" 290 local key="${2}"
317 291
318 env LC_ALL=C svn info "${target}" | grep -i "^${key}" | cut -d" " -f2- 292 env LC_ALL=C svn info "${target}" | grep -i "^${key}" | cut -d" " -f2-
319
320} 293}
321 294
322 295
323## -- subversion__get_repository_uri() --------------------------------------- # 296## -- subversion__get_repository_uri() --------------------------------------- #
324# 297#
325# @param $1 - a repository URI. 298# @param $1 - a repository URI.
326# @param $2 - a peg revision is deleted from a return value if this is 299# @param $2 - a peg revision is deleted from a return value if this is
327# specified. 300# specified.
328# 301#
329function subversion__get_repository_uri() { 302function subversion__get_repository_uri() {
330
331 local repo_uri="${1:-${ESVN_REPO_URI}}" 303 local repo_uri="${1:-${ESVN_REPO_URI}}"
332 local remove_peg_revision="${2}" 304 local remove_peg_revision="${2}"
333 305
334 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}" 306 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
335 debug-print "${FUNCNAME}: remove_peg_revision = ${remove_peg_revision}" 307 debug-print "${FUNCNAME}: remove_peg_revision = ${remove_peg_revision}"
351 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}" 323 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
352 fi 324 fi
353 fi 325 fi
354 326
355 echo "${repo_uri}" 327 echo "${repo_uri}"
356
357} 328}
358 329
359 330
360## -- subversion__get_wc_path() ---------------------------------------------- # 331## -- subversion__get_wc_path() ---------------------------------------------- #
361# 332#
362# @param $1 - a repository URI. 333# @param $1 - a repository URI.
363# 334#
364function subversion__get_wc_path() { 335function subversion__get_wc_path() {
365
366 local repo_uri="$(subversion__get_repository_uri "${1}" 1)" 336 local repo_uri="$(subversion__get_repository_uri "${1}" 1)"
367 337
368 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}" 338 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
369 339
370 echo "${ESVN_STORE_DIR}/${ESVN_PROJECT}/${repo_uri##*/}" 340 echo "${ESVN_STORE_DIR}/${ESVN_PROJECT}/${repo_uri##*/}"
371
372} 341}
373 342
374 343
375## -- subversion__has_peg_revision() ----------------------------------------- # 344## -- subversion__has_peg_revision() ----------------------------------------- #
376# 345#
377# @param $1 - a repository URI. 346# @param $1 - a repository URI.
378# 347#
379function subversion__has_peg_revision() { 348function subversion__has_peg_revision() {
380
381 local repo_uri="${1}" 349 local repo_uri="${1}"
382 350
383 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}" 351 debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
384 352
385 # repo_uri has peg revision ? 353 # repo_uri has peg revision ?
387 debug-print "${FUNCNAME}: repo_uri does not have a peg revision." 355 debug-print "${FUNCNAME}: repo_uri does not have a peg revision."
388 return 1 356 return 1
389 fi 357 fi
390 358
391 local peg_rev="${repo_uri##*@}" 359 local peg_rev="${repo_uri##*@}"
392 local rev=$(subversion__svn_info "${repo_uri}" "revision") 360
361 case "$(subversion__to_upper_case "${peg_rev}")" in
362 [[:digit:]]*)
363 # NUMBER
364 ;;
365 HEAD|BASE|COMMITED|PREV)
366 ;;
367 {[^}]*})
368 # DATE
369 ;;
370 *)
371 debug-print "${FUNCNAME}: repo_uri does not have a peg revision."
372 return 1
373 ;;
374 esac
393 375
394 debug-print "${FUNCNAME}: peg_rev = ${peg_rev}" 376 debug-print "${FUNCNAME}: peg_rev = ${peg_rev}"
395 debug-print "${FUNCNAME}: rev = ${rev} "
396 377
397 if [[ "${peg_rev}" -eq "${rev}" ]]; then
398 return 0 378 return 0
399 fi
400
401 return 1
402
403} 379}
380
381
382## -- subversion__to_upper_case() ----------------------------------------- #
383#
384# @param $@ - the strings to upper case.
385#
386function subversion__to_upper_case() {
387 echo "${@}" | tr "[a-z]" "[A-Z]"
388}

Legend:
Removed from v.1.39  
changed lines
  Added in v.1.44

  ViewVC Help
Powered by ViewVC 1.1.20