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

Contents of /eclass/subversion.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.29 - (show annotations) (download)
Fri Apr 28 14:20:03 2006 UTC (8 years, 2 months ago) by hattya
Branch: MAIN
Changes since 1.28: +8 -13 lines
fixes bug #129178 and #129427

1 # Copyright 1999-2006 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: /var/cvsroot/gentoo-x86/eclass/subversion.eclass,v 1.28 2006/03/20 15:01:59 hattya Exp $
4
5 ## --------------------------------------------------------------------------- #
6 # Author: Akinori Hattori <hattya@gentoo.org>
7 #
8 # 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 # It is necessary to define the ESVN_REPO_URI variable at least.
15 #
16 ## --------------------------------------------------------------------------- #
17
18 inherit eutils
19
20 ESVN="subversion.eclass"
21
22 EXPORT_FUNCTIONS src_unpack
23
24 HOMEPAGE="http://subversion.tigris.org/"
25 DESCRIPTION="Based on the ${ECLASS} eclass"
26
27
28 ## -- add subversion in DEPEND
29 #
30 DEPEND="dev-util/subversion"
31
32
33 ## -- ESVN_STORE_DIR: subversion sources store directory
34 #
35 ESVN_STORE_DIR="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/svn-src"
36
37
38 ## -- ESVN_FETCH_CMD: subversion fetch command
39 #
40 ESVN_FETCH_CMD="svn checkout"
41
42 ## -- ESVN_UPDATE_CMD: subversion update command
43 #
44 ESVN_UPDATE_CMD="svn update"
45
46
47 ## -- ESVN_OPTIONS:
48 #
49 # the options passed to checkout or update.
50 #
51 [ -z "${ESVN_OPTIONS}" ] && ESVN_OPTIONS=
52
53
54 ## -- ESVN_REPO_URI: repository uri
55 #
56 # e.g. http://foo/trunk, svn://bar/trunk
57 #
58 # supported protocols:
59 # http://
60 # https://
61 # svn://
62 #
63 [ -z "${ESVN_REPO_URI}" ] && ESVN_REPO_URI=""
64
65
66 ## -- ESVN_PROJECT: project name of your ebuild
67 #
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 # default: ${PN/-svn}.
79 #
80 [ -z "${ESVN_PROJECT}" ] && ESVN_PROJECT="${PN/-svn}"
81
82
83 ## -- ESVN_BOOTSTRAP:
84 #
85 # bootstrap script or command like autogen.sh or etc..
86 #
87 [ -z "${ESVN_BOOTSTRAP}" ] && ESVN_BOOTSTRAP=""
88
89
90 ## -- ESVN_PATCHES:
91 #
92 # subversion eclass can apply pathces in subversion_bootstrap().
93 # you can use regexp in this valiable like *.diff or *.patch or etc.
94 # NOTE: this patches will apply before eval ESVN_BOOTSTRAP.
95 #
96 # the process of applying the patch is:
97 # 1. just epatch it, if the patch exists in the path.
98 # 2. scan it under FILESDIR and epatch it, if the patch exists in FILESDIR.
99 # 3. die.
100 #
101 [ -z "${ESVN_PATCHES}" ] && ESVN_PATCHES=""
102
103
104 ## -- subversion_svn_fetch() ------------------------------------------------- #
105
106 function subversion_svn_fetch() {
107
108 local ESVN_CO_DIR
109
110 # ESVN_REPO_URI is empty.
111 [ -z "${ESVN_REPO_URI}" ] && die "${ESVN}: ESVN_REPO_URI is empty."
112
113 # check for the protocol.
114 case ${ESVN_REPO_URI%%:*} in
115 http|https)
116 if built_with_use dev-util/subversion nowebdav; then
117 eerror "In order to emerge this package, you need to"
118 eerror "re-emerge subversion with USE=-nowebdav"
119 die "Please run 'USE=-nowebdav emerge subversion'"
120 fi
121 ;;
122 svn) ;;
123 *)
124 die "${ESVN}: fetch from "${ESVN_REPO_URI%:*}" is not yet implemented."
125 ;;
126 esac
127
128 if [ ! -d "${ESVN_STORE_DIR}" ]; then
129 debug-print "${FUNCNAME}: initial checkout. creating subversion directory"
130
131 addwrite /
132 mkdir -p "${ESVN_STORE_DIR}" || die "${ESVN}: can't mkdir ${ESVN_STORE_DIR}."
133 chmod -f o+rw "${ESVN_STORE_DIR}" || die "${ESVN}: can't chmod ${ESVN_STORE_DIR}."
134 export SANDBOX_WRITE="${SANDBOX_WRITE%%:/}"
135 fi
136
137 cd -P "${ESVN_STORE_DIR}" || die "${ESVN}: can't chdir to ${ESVN_STORE_DIR}"
138 ESVN_STORE_DIR=${PWD}
139
140 # every time
141 addwrite "/etc/subversion"
142 addwrite "${ESVN_STORE_DIR}"
143
144 if ! has userpriv ${FEATURES}; then
145 # -userpriv
146 addwrite "/root/.subversion"
147
148 else
149 # +userpriv
150 ESVN_OPTIONS="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion"
151
152 fi
153
154 [ -z "${ESVN_REPO_URI##*/}" ] && ESVN_REPO_URI="${ESVN_REPO_URI%/}"
155 ESVN_CO_DIR="${ESVN_PROJECT}/${ESVN_REPO_URI##*/}"
156
157 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\""
158
159 if [ ! -d "${ESVN_CO_DIR}/.svn" ]; then
160 # first check out
161 einfo "subversion check out start -->"
162 einfo " repository: ${ESVN_REPO_URI}"
163
164 mkdir -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}."
165 chmod -f o+rw "${ESVN_PROJECT}" || die "${ESVN}: can't chmod ${ESVN_PROJECT}."
166 cd "${ESVN_PROJECT}"
167 ${ESVN_FETCH_CMD} ${ESVN_OPTIONS} "${ESVN_REPO_URI}" || die "${ESVN}: can't fetch from ${ESVN_REPO_URI}."
168
169 else
170 # update working copy
171 einfo "subversion update start -->"
172 einfo " repository: ${ESVN_REPO_URI}"
173
174 cd "${ESVN_CO_DIR}"
175 ${ESVN_UPDATE_CMD} ${ESVN_OPTIONS} || die "${ESVN}: can't update from ${ESVN_REPO_URI}."
176
177 fi
178
179 einfo " working copy: ${ESVN_STORE_DIR}/${ESVN_CO_DIR}"
180
181 # export to the ${WORKDIR}
182 # "svn export" has a bug. see http://bugs.gentoo.org/119236
183 #svn export "${ESVN_STORE_DIR}/${ESVN_CO_DIR}" "${S}" || die "${ESVN}: can't export to ${S}."
184 rsync -aC "${ESVN_STORE_DIR}/${ESVN_CO_DIR}/" "${S}" || die "${ESVN}: can't export to ${S}."
185 echo
186
187 }
188
189
190 ## -- subversion_bootstrap() ------------------------------------------------ #
191
192 function subversion_bootstrap() {
193
194 local patch lpatch
195
196 cd "${S}"
197
198 if [ "${ESVN_PATCHES}" ]; then
199 einfo "apply patches -->"
200
201 for patch in ${ESVN_PATCHES}; do
202 if [ -f "${patch}" ]; then
203 epatch ${patch}
204
205 else
206 for lpatch in ${FILESDIR}/${patch}; do
207 if [ -f "${lpatch}" ]; then
208 epatch ${lpatch}
209
210 else
211 die "${ESVN}; ${patch} is not found"
212
213 fi
214 done
215 fi
216 done
217 echo
218 fi
219
220 if [ "${ESVN_BOOTSTRAP}" ]; then
221 einfo "begin bootstrap -->"
222
223 if [ -f "${ESVN_BOOTSTRAP}" -a -x "${ESVN_BOOTSTRAP}" ]; then
224 einfo " bootstrap with a file: ${ESVN_BOOTSTRAP}"
225 eval "./${ESVN_BOOTSTRAP}" || die "${ESVN}: can't execute ESVN_BOOTSTRAP."
226
227 else
228 einfo " bootstrap with commands: ${ESVN_BOOTSTRAP}"
229 eval "${ESVN_BOOTSTRAP}" || die "${ESVN}: can't eval ESVN_BOOTSTRAP."
230
231 fi
232 fi
233
234 }
235
236
237 ## -- subversion_src_unpack() ------------------------------------------------ #
238
239 function subversion_src_unpack() {
240
241 subversion_svn_fetch || die "${ESVN}: unknown problem in subversion_svn_fetch()."
242 subversion_bootstrap || die "${ESVN}: unknown problem in subversion_bootstrap()."
243
244 }

  ViewVC Help
Powered by ViewVC 1.1.20