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

Contents of /eclass/subversion.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.42 - (hide annotations) (download)
Mon Apr 23 18:55:15 2007 UTC (7 years, 4 months ago) by cardoe
Branch: MAIN
Changes since 1.41: +1 -2 lines
should not contain HOMEPAGE as it's up to individual ebuilds to set this, and should not point to SubVersion.

1 hattya 1.39 # Copyright 1999-2007 Gentoo Foundation
2 hattya 1.1 # Distributed under the terms of the GNU General Public License v2
3 cardoe 1.42 # $Header: /var/cvsroot/gentoo-x86/eclass/subversion.eclass,v 1.41 2007/04/01 14:48:37 hattya Exp $
4 hattya 1.1
5     ## --------------------------------------------------------------------------- #
6     # Author: Akinori Hattori <hattya@gentoo.org>
7 swegener 1.23 #
8 hattya 1.1 # The subversion eclass is written to fetch the software sources from
9     # subversion repositories like the cvs eclass.
10     #
11     #
12     # Description:
13     # If you use this eclass, the ${S} is ${WORKDIR}/${P}.
14 hattya 1.10 # It is necessary to define the ESVN_REPO_URI variable at least.
15 hattya 1.1 #
16     ## --------------------------------------------------------------------------- #
17    
18 hattya 1.8 inherit eutils
19 hattya 1.1
20 hattya 1.8 ESVN="subversion.eclass"
21 hattya 1.1
22     EXPORT_FUNCTIONS src_unpack
23    
24 hattya 1.5 DESCRIPTION="Based on the ${ECLASS} eclass"
25 hattya 1.1
26    
27     ## -- add subversion in DEPEND
28     #
29 mr_bones_ 1.9 DEPEND="dev-util/subversion"
30 hattya 1.1
31    
32     ## -- ESVN_STORE_DIR: subversion sources store directory
33     #
34 ferringb 1.26 ESVN_STORE_DIR="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/svn-src"
35 hattya 1.1
36    
37     ## -- ESVN_FETCH_CMD: subversion fetch command
38     #
39 hattya 1.25 ESVN_FETCH_CMD="svn checkout"
40    
41     ## -- ESVN_UPDATE_CMD: subversion update command
42 hattya 1.1 #
43 hattya 1.25 ESVN_UPDATE_CMD="svn update"
44 hattya 1.1
45 hattya 1.25
46     ## -- ESVN_OPTIONS:
47 hattya 1.1 #
48 hattya 1.25 # the options passed to checkout or update.
49 hattya 1.1 #
50 hattya 1.33 : ESVN_OPTIONS=${ESVN_OPTIONS:=}
51 hattya 1.1
52    
53     ## -- ESVN_REPO_URI: repository uri
54     #
55     # e.g. http://foo/trunk, svn://bar/trunk
56 hattya 1.12 #
57     # supported protocols:
58     # http://
59     # https://
60     # svn://
61 hattya 1.33 # svn+ssh://
62 hattya 1.1 #
63 hattya 1.33 : ESVN_REPO_URI=${ESVN_REPO_URI:=}
64 hattya 1.1
65    
66 hattya 1.33 ## -- ESVN_PROJECT: project name of your ebuild (= name space)
67 hattya 1.1 #
68     # subversion eclass will check out the subversion repository like:
69     #
70     # ${ESVN_STORE_DIR}/${ESVN_PROJECT}/${ESVN_REPO_URI##*/}
71     #
72     # so if you define ESVN_REPO_URI as http://svn.collab.net/repo/svn/trunk or
73     # http://svn.collab.net/repo/svn/trunk/. and PN is subversion-svn.
74     # it will check out like:
75     #
76     # ${ESVN_STORE_DIR}/subversion/trunk
77     #
78 hattya 1.33 # this is not used in order to declare the name of the upstream project.
79     # so that you can declare this like:
80     #
81     # # jakarta commons-loggin
82     # ESVN_PROJECT=commons/logging
83     #
84 hattya 1.1 # default: ${PN/-svn}.
85     #
86 hattya 1.33 : ESVN_PROJECT=${ESVN_PROJECT:=${PN/-svn}}
87 hattya 1.1
88    
89     ## -- ESVN_BOOTSTRAP:
90     #
91 hattya 1.8 # bootstrap script or command like autogen.sh or etc..
92 hattya 1.1 #
93 hattya 1.33 : ESVN_BOOTSTRAP=${ESVN_BOOTSTRAP:=}
94 hattya 1.1
95    
96 hattya 1.8 ## -- ESVN_PATCHES:
97     #
98     # subversion eclass can apply pathces in subversion_bootstrap().
99     # you can use regexp in this valiable like *.diff or *.patch or etc.
100     # NOTE: this patches will apply before eval ESVN_BOOTSTRAP.
101     #
102     # the process of applying the patch is:
103     # 1. just epatch it, if the patch exists in the path.
104     # 2. scan it under FILESDIR and epatch it, if the patch exists in FILESDIR.
105     # 3. die.
106     #
107 hattya 1.33 : ESVN_PATCHES=${ESVN_PATCHES:=}
108    
109    
110     ## -- ESVN_RESTRICT:
111     #
112 hattya 1.39 # this should be a space delimited list of subversion eclass features to
113     # restrict.
114 hattya 1.33 # export)
115     # don't export the working copy to S.
116     #
117     : ESVN_RESTRICT=${ESVN_RESTRICT:=}
118    
119    
120     ## -- subversion_fetch() ----------------------------------------------------- #
121 hattya 1.39 #
122     # @param $1 - a repository URI. default is the ESVN_REPO_URI.
123 hattya 1.40 # @param $2 - a check out path in S.
124 hattya 1.39 #
125 hattya 1.33 function subversion_fetch() {
126 hattya 1.8
127 hattya 1.39 local repo_uri="$(subversion__get_repository_uri "${1}")"
128     local S_dest="${2}"
129 hattya 1.25
130 hattya 1.33 # check for the protocol
131 hattya 1.39 local protocol="${repo_uri%%:*}"
132 hattya 1.1
133 hattya 1.33 case "${protocol}" in
134 vapier 1.24 http|https)
135 hattya 1.25 if built_with_use dev-util/subversion nowebdav; then
136 hattya 1.34 echo
137 vapier 1.24 eerror "In order to emerge this package, you need to"
138     eerror "re-emerge subversion with USE=-nowebdav"
139 hattya 1.34 echo
140     die "${ESVN}: please run 'USE=-nowebdav emerge subversion'"
141 vapier 1.24 fi
142     ;;
143 hattya 1.33 svn|svn+ssh)
144     ;;
145 hattya 1.5 *)
146 hattya 1.33 die "${ESVN}: fetch from "${protocol}" is not yet implemented."
147 hattya 1.5 ;;
148     esac
149 hattya 1.1
150 hattya 1.38 # every time
151     addread "/etc/subversion"
152     addwrite "${ESVN_STORE_DIR}"
153    
154 hattya 1.33 if [[ ! -d "${ESVN_STORE_DIR}" ]]; then
155 hattya 1.17 debug-print "${FUNCNAME}: initial checkout. creating subversion directory"
156 hattya 1.33 mkdir -p "${ESVN_STORE_DIR}" || die "${ESVN}: can't mkdir ${ESVN_STORE_DIR}."
157 hattya 1.1 fi
158    
159 hattya 1.33 cd "${ESVN_STORE_DIR}" || die "${ESVN}: can't chdir to ${ESVN_STORE_DIR}"
160 hattya 1.1
161 hattya 1.39 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
162 hattya 1.38 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion"
163 hattya 1.1
164 hattya 1.39 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\""
165 hattya 1.25 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\""
166 hattya 1.38 debug-print "${FUNCNAME}: options = \"${options}\""
167 joker 1.37
168 hattya 1.33 if [[ ! -d "${wc_path}/.svn" ]]; then
169 hattya 1.1 # first check out
170     einfo "subversion check out start -->"
171 hattya 1.33 einfo " repository: ${repo_uri}"
172 hattya 1.1
173 hattya 1.39 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}"
174    
175     mkdir -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}."
176     cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}"
177 hattya 1.38 ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch from ${repo_uri}."
178 hattya 1.12
179 hattya 1.1 else
180 hattya 1.39 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy."
181 hattya 1.34
182 hattya 1.39 if [ "${ESVN_WC_URL}" != "$(subversion__get_repository_uri "${repo_uri}" 1)" ]; then
183 hattya 1.38 die "${ESVN}: ESVN_REPO_URI (or specified URI) and working copy's URL are not matched."
184 hattya 1.34 fi
185    
186 hattya 1.1 # update working copy
187     einfo "subversion update start -->"
188 hattya 1.33 einfo " repository: ${repo_uri}"
189 hattya 1.25
190 hattya 1.39 debug-print "${FUNCNAME}: ${ESVN_UPDATE_CMD} ${options}"
191    
192     cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
193 hattya 1.38 ${ESVN_UPDATE_CMD} ${options} || die "${ESVN}: can't update from ${repo_uri}."
194 hattya 1.1
195 hattya 1.29 fi
196 hattya 1.8
197 hattya 1.39 einfo " working copy: ${wc_path}"
198 hattya 1.33
199     if ! has "export" ${ESVN_RESTRICT}; then
200 hattya 1.39 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
201    
202     local S="${S}/${S_dest}"
203 hattya 1.33
204     # export to the ${WORKDIR}
205     #* "svn export" has a bug. see http://bugs.gentoo.org/119236
206     #* svn export . "${S}" || die "${ESVN}: can't export to ${S}."
207     rsync -rlpgo --exclude=".svn/" . "${S}" || die "${ESVN}: can't export to ${S}."
208     fi
209 hattya 1.1
210 hattya 1.8 echo
211 hattya 1.1
212     }
213    
214    
215     ## -- subversion_bootstrap() ------------------------------------------------ #
216 hattya 1.39 #
217 hattya 1.17 function subversion_bootstrap() {
218    
219 hattya 1.33 if has "export" ${ESVN_RESTRICT}; then
220     return
221     fi
222 hattya 1.1
223 hattya 1.8 cd "${S}"
224    
225 hattya 1.33 if [[ -n "${ESVN_PATCHES}" ]]; then
226 hattya 1.15 einfo "apply patches -->"
227 hattya 1.12
228 hattya 1.33 local p=
229    
230     for p in ${ESVN_PATCHES}; do
231     if [[ -f "${p}" ]]; then
232     epatch "${p}"
233 hattya 1.8
234     else
235 hattya 1.33 local q=
236    
237     for q in ${FILESDIR}/${p}; do
238     if [[ -f "${q}" ]]; then
239     epatch "${q}"
240 hattya 1.8
241     else
242 hattya 1.33 die "${ESVN}; ${p} is not found"
243 hattya 1.8
244     fi
245     done
246     fi
247     done
248 hattya 1.33
249 hattya 1.8 echo
250 hattya 1.33
251 hattya 1.8 fi
252    
253 hattya 1.33 if [[ -n "${ESVN_BOOTSTRAP}" ]]; then
254 hattya 1.8 einfo "begin bootstrap -->"
255 hattya 1.12
256 hattya 1.33 if [[ -f "${ESVN_BOOTSTRAP}" && -x "${ESVN_BOOTSTRAP}" ]]; then
257 hattya 1.8 einfo " bootstrap with a file: ${ESVN_BOOTSTRAP}"
258     eval "./${ESVN_BOOTSTRAP}" || die "${ESVN}: can't execute ESVN_BOOTSTRAP."
259    
260     else
261 hattya 1.16 einfo " bootstrap with commands: ${ESVN_BOOTSTRAP}"
262 hattya 1.8 eval "${ESVN_BOOTSTRAP}" || die "${ESVN}: can't eval ESVN_BOOTSTRAP."
263 hattya 1.1
264     fi
265     fi
266    
267     }
268    
269    
270     ## -- subversion_src_unpack() ------------------------------------------------ #
271 hattya 1.39 #
272 hattya 1.17 function subversion_src_unpack() {
273 hattya 1.1
274 hattya 1.34 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch."
275     subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
276 hattya 1.1
277     }
278 hattya 1.33
279    
280     ## -- subversion_wc_info() --------------------------------------------------- #
281 hattya 1.39 #
282     # @param $1 - repository URI. default is ESVN_REPO_URI.
283     #
284     function subversion_wc_info() {
285    
286     local repo_uri="$(subversion__get_repository_uri "${1}")"
287     local wc_path="$(subversion__get_wc_path "${repo_uri}")"
288    
289     debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
290     debug-print "${FUNCNAME}: wc_path = ${wc_path}"
291    
292     if [[ ! -e "${wc_path}" ]]; then
293     return 1
294     fi
295    
296     local k
297    
298     for k in url revision; do
299 hattya 1.41 export ESVN_WC_$(subversion__to_upper_case "${k}")="$(subversion__svn_info "${wc_path}" "${k}")"
300 hattya 1.39 done
301    
302     }
303    
304    
305     ## -- Private Functions
306    
307    
308     ## -- subversion__svn_info() ------------------------------------------------- #
309     #
310     # @param $1 - a target.
311     # @param $2 - a key name.
312     #
313     function subversion__svn_info() {
314 hattya 1.33
315 hattya 1.39 local target="${1}"
316     local key="${2}"
317    
318     env LC_ALL=C svn info "${target}" | grep -i "^${key}" | cut -d" " -f2-
319    
320     }
321    
322    
323     ## -- subversion__get_repository_uri() --------------------------------------- #
324     #
325     # @param $1 - a repository URI.
326     # @param $2 - a peg revision is deleted from a return value if this is
327     # specified.
328     #
329     function subversion__get_repository_uri() {
330    
331     local repo_uri="${1:-${ESVN_REPO_URI}}"
332     local remove_peg_revision="${2}"
333    
334     debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
335     debug-print "${FUNCNAME}: remove_peg_revision = ${remove_peg_revision}"
336 hattya 1.33
337 hattya 1.39 if [[ -z "${repo_uri}" ]]; then
338     die "${ESVN}: ESVN_REPO_URI (or specified URI) is empty."
339     fi
340 hattya 1.33
341     # delete trailing slash
342     if [[ -z "${repo_uri##*/}" ]]; then
343     repo_uri="${repo_uri%/}"
344     fi
345    
346 hattya 1.39 if [[ -n "${remove_peg_revision}" ]]; then
347     if subversion__has_peg_revision "${repo_uri}"; then
348     repo_uri="${repo_uri%@*}"
349    
350     debug-print "${FUNCNAME}: repo_uri has a peg revision"
351     debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
352     fi
353     fi
354    
355     echo "${repo_uri}"
356    
357     }
358    
359 hattya 1.33
360 hattya 1.39 ## -- subversion__get_wc_path() ---------------------------------------------- #
361     #
362     # @param $1 - a repository URI.
363     #
364     function subversion__get_wc_path() {
365    
366     local repo_uri="$(subversion__get_repository_uri "${1}" 1)"
367    
368     debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
369    
370     echo "${ESVN_STORE_DIR}/${ESVN_PROJECT}/${repo_uri##*/}"
371    
372     }
373    
374    
375     ## -- subversion__has_peg_revision() ----------------------------------------- #
376     #
377     # @param $1 - a repository URI.
378     #
379     function subversion__has_peg_revision() {
380    
381     local repo_uri="${1}"
382    
383     debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
384    
385     # repo_uri has peg revision ?
386     if [[ "${repo_uri}" != *@* ]]; then
387     debug-print "${FUNCNAME}: repo_uri does not have a peg revision."
388 hattya 1.33 return 1
389     fi
390    
391 hattya 1.39 local peg_rev="${repo_uri##*@}"
392 hattya 1.41
393     case "$(subversion__to_upper_case "${peg_rev}")" in
394     [[:digit:]]*)
395     # NUMBER
396     ;;
397     HEAD|BASE|COMMITED|PREV)
398     ;;
399     {[^}]*})
400     # DATE
401     ;;
402     *)
403     debug-print "${FUNCNAME}: repo_uri does not have a peg revision."
404     return 1
405     ;;
406     esac
407 hattya 1.33
408 hattya 1.39 debug-print "${FUNCNAME}: peg_rev = ${peg_rev}"
409    
410 hattya 1.41 return 0
411    
412     }
413 hattya 1.39
414 hattya 1.33
415 hattya 1.41 ## -- subversion__to_upper_case() ----------------------------------------- #
416     #
417     # @param $@ - the strings to upper case.
418     #
419     function subversion__to_upper_case() {
420     echo "${@}" | tr "[a-z]" "[A-Z]"
421 hattya 1.33 }

  ViewVC Help
Powered by ViewVC 1.1.20