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

Contents of /eclass/subversion.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.34 - (hide annotations) (download)
Sun Sep 3 13:01:57 2006 UTC (8 years, 2 months ago) by hattya
Branch: MAIN
Changes since 1.33: +14 -17 lines
fixes bug #143480

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.34 # $Header: /var/cvsroot/gentoo-x86/eclass/subversion.eclass,v 1.33 2006/07/22 13:52:38 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 hattya 1.34 echo
142 vapier 1.24 eerror "In order to emerge this package, you need to"
143     eerror "re-emerge subversion with USE=-nowebdav"
144 hattya 1.34 echo
145     die "${ESVN}: please run 'USE=-nowebdav emerge subversion'"
146 vapier 1.24 fi
147     ;;
148 hattya 1.33 svn|svn+ssh)
149     ;;
150 hattya 1.5 *)
151 hattya 1.33 die "${ESVN}: fetch from "${protocol}" is not yet implemented."
152 hattya 1.5 ;;
153     esac
154 hattya 1.1
155 hattya 1.33 if [[ ! -d "${ESVN_STORE_DIR}" ]]; then
156 hattya 1.17 debug-print "${FUNCNAME}: initial checkout. creating subversion directory"
157 hattya 1.5
158 hattya 1.33 mkdir -p "${ESVN_STORE_DIR}" || die "${ESVN}: can't mkdir ${ESVN_STORE_DIR}."
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 hattya 1.34 addread "/etc/subversion"
165 hattya 1.12
166 hattya 1.34 ESVN_OPTIONS="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion"
167 hattya 1.12
168 hattya 1.33 local wc_path=${ESVN_PROJECT}/${repo_uri##*/}
169 hattya 1.1
170 hattya 1.25 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\""
171    
172 hattya 1.33 if [[ ! -d "${wc_path}/.svn" ]]; then
173 hattya 1.1 # first check out
174     einfo "subversion check out start -->"
175 hattya 1.33 einfo " repository: ${repo_uri}"
176 hattya 1.1
177 hattya 1.12 mkdir -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}."
178 hattya 1.5 cd "${ESVN_PROJECT}"
179 hattya 1.33 ${ESVN_FETCH_CMD} ${ESVN_OPTIONS} "${repo_uri}" || die "${ESVN}: can't fetch from ${repo_uri}."
180 hattya 1.12
181 hattya 1.1 else
182 hattya 1.34 subversion_wc_info || die "${ESVN}: unknown problem occurred while accessing working copy."
183    
184     if [[ "${ESVN_WC_URL}" != "${ESVN_REPO_URI}" ]]; then
185     die "${ESVN}: ESVN_REPO_URI and working copy's URL are not matched."
186     fi
187    
188 hattya 1.1 # update working copy
189     einfo "subversion update start -->"
190 hattya 1.33 einfo " repository: ${repo_uri}"
191 hattya 1.25
192 hattya 1.33 cd "${wc_path}"
193     ${ESVN_UPDATE_CMD} ${ESVN_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.33 einfo " working copy: ${ESVN_STORE_DIR}/${wc_path}"
198    
199     if ! has "export" ${ESVN_RESTRICT}; then
200     cd "${ESVN_STORE_DIR}/${wc_path}"
201    
202     # export to the ${WORKDIR}
203     #* "svn export" has a bug. see http://bugs.gentoo.org/119236
204     #* svn export . "${S}" || die "${ESVN}: can't export to ${S}."
205     rsync -rlpgo --exclude=".svn/" . "${S}" || die "${ESVN}: can't export to ${S}."
206     fi
207 hattya 1.1
208 hattya 1.8 echo
209 hattya 1.1
210     }
211    
212    
213     ## -- subversion_bootstrap() ------------------------------------------------ #
214    
215 hattya 1.17 function subversion_bootstrap() {
216    
217 hattya 1.33 if has "export" ${ESVN_RESTRICT}; then
218     return
219     fi
220 hattya 1.1
221 hattya 1.8 cd "${S}"
222    
223 hattya 1.33 if [[ -n "${ESVN_PATCHES}" ]]; then
224 hattya 1.15 einfo "apply patches -->"
225 hattya 1.12
226 hattya 1.33 local p=
227    
228     for p in ${ESVN_PATCHES}; do
229     if [[ -f "${p}" ]]; then
230     epatch "${p}"
231 hattya 1.8
232     else
233 hattya 1.33 local q=
234    
235     for q in ${FILESDIR}/${p}; do
236     if [[ -f "${q}" ]]; then
237     epatch "${q}"
238 hattya 1.8
239     else
240 hattya 1.33 die "${ESVN}; ${p} is not found"
241 hattya 1.8
242     fi
243     done
244     fi
245     done
246 hattya 1.33
247 hattya 1.8 echo
248 hattya 1.33
249 hattya 1.8 fi
250    
251 hattya 1.33 if [[ -n "${ESVN_BOOTSTRAP}" ]]; then
252 hattya 1.8 einfo "begin bootstrap -->"
253 hattya 1.12
254 hattya 1.33 if [[ -f "${ESVN_BOOTSTRAP}" && -x "${ESVN_BOOTSTRAP}" ]]; then
255 hattya 1.8 einfo " bootstrap with a file: ${ESVN_BOOTSTRAP}"
256     eval "./${ESVN_BOOTSTRAP}" || die "${ESVN}: can't execute ESVN_BOOTSTRAP."
257    
258     else
259 hattya 1.16 einfo " bootstrap with commands: ${ESVN_BOOTSTRAP}"
260 hattya 1.8 eval "${ESVN_BOOTSTRAP}" || die "${ESVN}: can't eval ESVN_BOOTSTRAP."
261 hattya 1.1
262     fi
263     fi
264    
265     }
266    
267    
268     ## -- subversion_src_unpack() ------------------------------------------------ #
269    
270 hattya 1.17 function subversion_src_unpack() {
271 hattya 1.1
272 hattya 1.34 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch."
273     subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
274 hattya 1.1
275     }
276 hattya 1.33
277    
278     ## -- subversion_wc_info() --------------------------------------------------- #
279    
280     function subversion_wc_info() {
281    
282     local repo_uri=${ESVN_REPO_URI}
283    
284     # delete trailing slash
285     if [[ -z "${repo_uri##*/}" ]]; then
286     repo_uri="${repo_uri%/}"
287     fi
288    
289     local wc_path=${ESVN_STORE_DIR}/${ESVN_PROJECT}/${repo_uri##*/}
290    
291     if [[ ! -e "${wc_path}" ]]; then
292     return 1
293     fi
294    
295     local k=
296    
297     for k in url revision; do
298     export ESVN_WC_$(echo "${k}" | tr [a-z] [A-Z])=$(env LANG=C svn info "${wc_path}" | grep -i "^${k}" | cut -d" " -f2)
299     done
300    
301     }

  ViewVC Help
Powered by ViewVC 1.1.20