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

Contents of /eclass/subversion.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.33 - (hide annotations) (download)
Sat Jul 22 13:52:38 2006 UTC (8 years, 1 month ago) by hattya
Branch: MAIN
Changes since 1.32: +108 -48 lines
fixes bug #133757 and bug #134336

1 vapier 1.27 # Copyright 1999-2006 Gentoo Foundation
2 hattya 1.1 # Distributed under the terms of the GNU General Public License v2
3 hattya 1.33 # $Header: /var/cvsroot/gentoo-x86/eclass/subversion.eclass,v 1.32 2006/05/16 13:54:08 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     HOMEPAGE="http://subversion.tigris.org/"
25 hattya 1.5 DESCRIPTION="Based on the ${ECLASS} eclass"
26 hattya 1.1
27    
28     ## -- add subversion in DEPEND
29     #
30 mr_bones_ 1.9 DEPEND="dev-util/subversion"
31 hattya 1.1
32    
33     ## -- ESVN_STORE_DIR: subversion sources store directory
34     #
35 ferringb 1.26 ESVN_STORE_DIR="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/svn-src"
36 hattya 1.1
37    
38     ## -- ESVN_FETCH_CMD: subversion fetch command
39     #
40 hattya 1.25 ESVN_FETCH_CMD="svn checkout"
41    
42     ## -- ESVN_UPDATE_CMD: subversion update command
43 hattya 1.1 #
44 hattya 1.25 ESVN_UPDATE_CMD="svn update"
45 hattya 1.1
46 hattya 1.25
47     ## -- ESVN_OPTIONS:
48 hattya 1.1 #
49 hattya 1.25 # the options passed to checkout or update.
50 hattya 1.1 #
51 hattya 1.33 : ESVN_OPTIONS=${ESVN_OPTIONS:=}
52 hattya 1.1
53    
54     ## -- ESVN_REPO_URI: repository uri
55     #
56     # e.g. http://foo/trunk, svn://bar/trunk
57 hattya 1.12 #
58     # supported protocols:
59     # http://
60     # https://
61     # svn://
62 hattya 1.33 # svn+ssh://
63 hattya 1.1 #
64 hattya 1.33 : ESVN_REPO_URI=${ESVN_REPO_URI:=}
65 hattya 1.1
66    
67 hattya 1.33 ## -- ESVN_PROJECT: project name of your ebuild (= name space)
68 hattya 1.1 #
69     # subversion eclass will check out the subversion repository like:
70     #
71     # ${ESVN_STORE_DIR}/${ESVN_PROJECT}/${ESVN_REPO_URI##*/}
72     #
73     # so if you define ESVN_REPO_URI as http://svn.collab.net/repo/svn/trunk or
74     # http://svn.collab.net/repo/svn/trunk/. and PN is subversion-svn.
75     # it will check out like:
76     #
77     # ${ESVN_STORE_DIR}/subversion/trunk
78     #
79 hattya 1.33 # this is not used in order to declare the name of the upstream project.
80     # so that you can declare this like:
81     #
82     # # jakarta commons-loggin
83     # ESVN_PROJECT=commons/logging
84     #
85 hattya 1.1 # default: ${PN/-svn}.
86     #
87 hattya 1.33 : ESVN_PROJECT=${ESVN_PROJECT:=${PN/-svn}}
88 hattya 1.1
89    
90     ## -- ESVN_BOOTSTRAP:
91     #
92 hattya 1.8 # bootstrap script or command like autogen.sh or etc..
93 hattya 1.1 #
94 hattya 1.33 : ESVN_BOOTSTRAP=${ESVN_BOOTSTRAP:=}
95 hattya 1.1
96    
97 hattya 1.8 ## -- ESVN_PATCHES:
98     #
99     # subversion eclass can apply pathces in subversion_bootstrap().
100     # you can use regexp in this valiable like *.diff or *.patch or etc.
101     # NOTE: this patches will apply before eval ESVN_BOOTSTRAP.
102     #
103     # the process of applying the patch is:
104     # 1. just epatch it, if the patch exists in the path.
105     # 2. scan it under FILESDIR and epatch it, if the patch exists in FILESDIR.
106     # 3. die.
107     #
108 hattya 1.33 : ESVN_PATCHES=${ESVN_PATCHES:=}
109    
110    
111     ## -- ESVN_RESTRICT:
112     #
113     # this should be a space delimited list of subversion eclass features to restrict.
114     # export)
115     # don't export the working copy to S.
116     #
117     : ESVN_RESTRICT=${ESVN_RESTRICT:=}
118    
119    
120     ## -- subversion_fetch() ----------------------------------------------------- #
121 hattya 1.8
122 hattya 1.33 function subversion_fetch() {
123 hattya 1.8
124 hattya 1.33 local repo_uri=${1:-${ESVN_REPO_URI}}
125 hattya 1.1
126 hattya 1.33 if [[ -z "${repo_uri}" ]]; then
127     die "${ESVN}: ESVN_REPO_URI is empty."
128     fi
129 hattya 1.1
130 hattya 1.33 # delete trailing slash
131     if [[ -z "${repo_uri##*/}" ]]; then
132     repo_uri=${repo_uri%/}
133     fi
134 hattya 1.25
135 hattya 1.33 # check for the protocol
136     local protocol=${repo_uri%%:*}
137 hattya 1.1
138 hattya 1.33 case "${protocol}" in
139 vapier 1.24 http|https)
140 hattya 1.25 if built_with_use dev-util/subversion nowebdav; then
141 vapier 1.24 eerror "In order to emerge this package, you need to"
142     eerror "re-emerge subversion with USE=-nowebdav"
143     die "Please run 'USE=-nowebdav emerge subversion'"
144     fi
145     ;;
146 hattya 1.33 svn|svn+ssh)
147     ;;
148 hattya 1.5 *)
149 hattya 1.33 die "${ESVN}: fetch from "${protocol}" is not yet implemented."
150 hattya 1.5 ;;
151     esac
152 hattya 1.1
153 hattya 1.33 if [[ ! -d "${ESVN_STORE_DIR}" ]]; then
154 hattya 1.17 debug-print "${FUNCNAME}: initial checkout. creating subversion directory"
155 hattya 1.5
156 hattya 1.17 addwrite /
157 hattya 1.33 mkdir -p "${ESVN_STORE_DIR}" || die "${ESVN}: can't mkdir ${ESVN_STORE_DIR}."
158     export SANDBOX_WRITE=${SANDBOX_WRITE%%:/}
159 hattya 1.1 fi
160    
161 hattya 1.33 cd "${ESVN_STORE_DIR}" || die "${ESVN}: can't chdir to ${ESVN_STORE_DIR}"
162 hattya 1.1
163 hattya 1.17 # every time
164     addwrite "/etc/subversion"
165     addwrite "${ESVN_STORE_DIR}"
166 hattya 1.12
167 hattya 1.25 if ! has userpriv ${FEATURES}; then
168     # -userpriv
169     addwrite "/root/.subversion"
170    
171     else
172     # +userpriv
173     ESVN_OPTIONS="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion"
174    
175     fi
176 hattya 1.12
177 hattya 1.33 local wc_path=${ESVN_PROJECT}/${repo_uri##*/}
178 hattya 1.1
179 hattya 1.25 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\""
180    
181 hattya 1.33 if [[ ! -d "${wc_path}/.svn" ]]; then
182 hattya 1.1 # first check out
183     einfo "subversion check out start -->"
184 hattya 1.33 einfo " repository: ${repo_uri}"
185 hattya 1.1
186 hattya 1.12 mkdir -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}."
187 hattya 1.5 cd "${ESVN_PROJECT}"
188 hattya 1.33 ${ESVN_FETCH_CMD} ${ESVN_OPTIONS} "${repo_uri}" || die "${ESVN}: can't fetch from ${repo_uri}."
189 hattya 1.12
190 hattya 1.1 else
191     # update working copy
192     einfo "subversion update start -->"
193 hattya 1.33 einfo " repository: ${repo_uri}"
194 hattya 1.25
195 hattya 1.33 cd "${wc_path}"
196     ${ESVN_UPDATE_CMD} ${ESVN_OPTIONS} || die "${ESVN}: can't update from ${repo_uri}."
197 hattya 1.1
198 hattya 1.29 fi
199 hattya 1.8
200 hattya 1.33 einfo " working copy: ${ESVN_STORE_DIR}/${wc_path}"
201    
202     if ! has "export" ${ESVN_RESTRICT}; then
203     cd "${ESVN_STORE_DIR}/${wc_path}"
204    
205     # export to the ${WORKDIR}
206     #* "svn export" has a bug. see http://bugs.gentoo.org/119236
207     #* svn export . "${S}" || die "${ESVN}: can't export to ${S}."
208     rsync -rlpgo --exclude=".svn/" . "${S}" || die "${ESVN}: can't export to ${S}."
209     fi
210 hattya 1.1
211 hattya 1.8 echo
212 hattya 1.1
213     }
214    
215    
216     ## -- subversion_bootstrap() ------------------------------------------------ #
217    
218 hattya 1.17 function subversion_bootstrap() {
219    
220 hattya 1.33 if has "export" ${ESVN_RESTRICT}; then
221     return
222     fi
223 hattya 1.1
224 hattya 1.8 cd "${S}"
225    
226 hattya 1.33 if [[ -n "${ESVN_PATCHES}" ]]; then
227 hattya 1.15 einfo "apply patches -->"
228 hattya 1.12
229 hattya 1.33 local p=
230    
231     for p in ${ESVN_PATCHES}; do
232     if [[ -f "${p}" ]]; then
233     epatch "${p}"
234 hattya 1.8
235     else
236 hattya 1.33 local q=
237    
238     for q in ${FILESDIR}/${p}; do
239     if [[ -f "${q}" ]]; then
240     epatch "${q}"
241 hattya 1.8
242     else
243 hattya 1.33 die "${ESVN}; ${p} is not found"
244 hattya 1.8
245     fi
246     done
247     fi
248     done
249 hattya 1.33
250 hattya 1.8 echo
251 hattya 1.33
252 hattya 1.8 fi
253    
254 hattya 1.33 if [[ -n "${ESVN_BOOTSTRAP}" ]]; then
255 hattya 1.8 einfo "begin bootstrap -->"
256 hattya 1.12
257 hattya 1.33 if [[ -f "${ESVN_BOOTSTRAP}" && -x "${ESVN_BOOTSTRAP}" ]]; then
258 hattya 1.8 einfo " bootstrap with a file: ${ESVN_BOOTSTRAP}"
259     eval "./${ESVN_BOOTSTRAP}" || die "${ESVN}: can't execute ESVN_BOOTSTRAP."
260    
261     else
262 hattya 1.16 einfo " bootstrap with commands: ${ESVN_BOOTSTRAP}"
263 hattya 1.8 eval "${ESVN_BOOTSTRAP}" || die "${ESVN}: can't eval ESVN_BOOTSTRAP."
264 hattya 1.1
265     fi
266     fi
267    
268     }
269    
270    
271     ## -- subversion_src_unpack() ------------------------------------------------ #
272    
273 hattya 1.17 function subversion_src_unpack() {
274 hattya 1.1
275 hattya 1.33 subversion_fetch || die "${ESVN}: unknown problem in subversion_fetch()."
276 hattya 1.8 subversion_bootstrap || die "${ESVN}: unknown problem in subversion_bootstrap()."
277 hattya 1.1
278     }
279 hattya 1.33
280    
281     ## -- subversion_wc_info() --------------------------------------------------- #
282    
283     function subversion_wc_info() {
284    
285     local repo_uri=${ESVN_REPO_URI}
286    
287     # delete trailing slash
288     if [[ -z "${repo_uri##*/}" ]]; then
289     repo_uri="${repo_uri%/}"
290     fi
291    
292     local wc_path=${ESVN_STORE_DIR}/${ESVN_PROJECT}/${repo_uri##*/}
293    
294     if [[ ! -e "${wc_path}" ]]; then
295     return 1
296     fi
297    
298     local k=
299    
300     for k in url revision; do
301     export ESVN_WC_$(echo "${k}" | tr [a-z] [A-Z])=$(env LANG=C svn info "${wc_path}" | grep -i "^${k}" | cut -d" " -f2)
302     done
303    
304     }

  ViewVC Help
Powered by ViewVC 1.1.20