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

Diff of /eclass/subversion.eclass

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

Revision 1.31 Revision 1.33
1# Copyright 1999-2006 Gentoo Foundation 1# Copyright 1999-2006 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.31 2006/04/30 09:26:56 hattya Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/subversion.eclass,v 1.33 2006/07/22 13:52:38 hattya 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
46 46
47## -- ESVN_OPTIONS: 47## -- ESVN_OPTIONS:
48# 48#
49# the options passed to checkout or update. 49# the options passed to checkout or update.
50# 50#
51[ -z "${ESVN_OPTIONS}" ] && ESVN_OPTIONS= 51: ESVN_OPTIONS=${ESVN_OPTIONS:=}
52 52
53 53
54## -- ESVN_REPO_URI: repository uri 54## -- ESVN_REPO_URI: repository uri
55# 55#
56# e.g. http://foo/trunk, svn://bar/trunk 56# e.g. http://foo/trunk, svn://bar/trunk
57# 57#
58# supported protocols: 58# supported protocols:
59# http:// 59# http://
60# https:// 60# https://
61# svn:// 61# svn://
62# svn+ssh://
62# 63#
63[ -z "${ESVN_REPO_URI}" ] && ESVN_REPO_URI="" 64: ESVN_REPO_URI=${ESVN_REPO_URI:=}
64 65
65 66
66## -- ESVN_PROJECT: project name of your ebuild 67## -- ESVN_PROJECT: project name of your ebuild (= name space)
67# 68#
68# subversion eclass will check out the subversion repository like: 69# subversion eclass will check out the subversion repository like:
69# 70#
70# ${ESVN_STORE_DIR}/${ESVN_PROJECT}/${ESVN_REPO_URI##*/} 71# ${ESVN_STORE_DIR}/${ESVN_PROJECT}/${ESVN_REPO_URI##*/}
71# 72#
73# http://svn.collab.net/repo/svn/trunk/. and PN is subversion-svn. 74# http://svn.collab.net/repo/svn/trunk/. and PN is subversion-svn.
74# it will check out like: 75# it will check out like:
75# 76#
76# ${ESVN_STORE_DIR}/subversion/trunk 77# ${ESVN_STORE_DIR}/subversion/trunk
77# 78#
79# 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#
78# default: ${PN/-svn}. 85# default: ${PN/-svn}.
79# 86#
80[ -z "${ESVN_PROJECT}" ] && ESVN_PROJECT="${PN/-svn}" 87: ESVN_PROJECT=${ESVN_PROJECT:=${PN/-svn}}
81 88
82 89
83## -- ESVN_BOOTSTRAP: 90## -- ESVN_BOOTSTRAP:
84# 91#
85# bootstrap script or command like autogen.sh or etc.. 92# bootstrap script or command like autogen.sh or etc..
86# 93#
87[ -z "${ESVN_BOOTSTRAP}" ] && ESVN_BOOTSTRAP="" 94: ESVN_BOOTSTRAP=${ESVN_BOOTSTRAP:=}
88 95
89 96
90## -- ESVN_PATCHES: 97## -- ESVN_PATCHES:
91# 98#
92# subversion eclass can apply pathces in subversion_bootstrap(). 99# subversion eclass can apply pathces in subversion_bootstrap().
96# the process of applying the patch is: 103# the process of applying the patch is:
97# 1. just epatch it, if the patch exists in the path. 104# 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. 105# 2. scan it under FILESDIR and epatch it, if the patch exists in FILESDIR.
99# 3. die. 106# 3. die.
100# 107#
101[ -z "${ESVN_PATCHES}" ] && ESVN_PATCHES="" 108: ESVN_PATCHES=${ESVN_PATCHES:=}
102 109
103 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
104## -- subversion_svn_fetch() ------------------------------------------------- # 120## -- subversion_fetch() ----------------------------------------------------- #
105 121
106function subversion_svn_fetch() { 122function subversion_fetch() {
107 123
108 local ESVN_CO_DIR 124 local repo_uri=${1:-${ESVN_REPO_URI}}
109 125
126 if [[ -z "${repo_uri}" ]]; then
110 # ESVN_REPO_URI is empty. 127 die "${ESVN}: ESVN_REPO_URI is empty."
111 [ -z "${ESVN_REPO_URI}" ] && die "${ESVN}: ESVN_REPO_URI is empty." 128 fi
112 129
130 # delete trailing slash
131 if [[ -z "${repo_uri##*/}" ]]; then
132 repo_uri=${repo_uri%/}
133 fi
134
113 # check for the protocol. 135 # check for the protocol
114 case ${ESVN_REPO_URI%%:*} in 136 local protocol=${repo_uri%%:*}
137
138 case "${protocol}" in
115 http|https) 139 http|https)
116 if built_with_use dev-util/subversion nowebdav; then 140 if built_with_use dev-util/subversion nowebdav; then
117 eerror "In order to emerge this package, you need to" 141 eerror "In order to emerge this package, you need to"
118 eerror "re-emerge subversion with USE=-nowebdav" 142 eerror "re-emerge subversion with USE=-nowebdav"
119 die "Please run 'USE=-nowebdav emerge subversion'" 143 die "Please run 'USE=-nowebdav emerge subversion'"
120 fi 144 fi
121 ;; 145 ;;
122 svn) ;; 146 svn|svn+ssh)
147 ;;
123 *) 148 *)
124 die "${ESVN}: fetch from "${ESVN_REPO_URI%:*}" is not yet implemented." 149 die "${ESVN}: fetch from "${protocol}" is not yet implemented."
125 ;; 150 ;;
126 esac 151 esac
127 152
128 if [ ! -d "${ESVN_STORE_DIR}" ]; then 153 if [[ ! -d "${ESVN_STORE_DIR}" ]]; then
129 debug-print "${FUNCNAME}: initial checkout. creating subversion directory" 154 debug-print "${FUNCNAME}: initial checkout. creating subversion directory"
130 155
131 addwrite / 156 addwrite /
132 mkdir -p "${ESVN_STORE_DIR}" || die "${ESVN}: can't mkdir ${ESVN_STORE_DIR}." 157 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%%:/}" 158 export SANDBOX_WRITE=${SANDBOX_WRITE%%:/}
135 fi 159 fi
136 160
137 cd -P "${ESVN_STORE_DIR}" || die "${ESVN}: can't chdir to ${ESVN_STORE_DIR}" 161 cd "${ESVN_STORE_DIR}" || die "${ESVN}: can't chdir to ${ESVN_STORE_DIR}"
138 ESVN_STORE_DIR=${PWD}
139 162
140 # every time 163 # every time
141 addwrite "/etc/subversion" 164 addwrite "/etc/subversion"
142 addwrite "${ESVN_STORE_DIR}" 165 addwrite "${ESVN_STORE_DIR}"
143 166
149 # +userpriv 172 # +userpriv
150 ESVN_OPTIONS="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion" 173 ESVN_OPTIONS="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion"
151 174
152 fi 175 fi
153 176
154 [ -z "${ESVN_REPO_URI##*/}" ] && ESVN_REPO_URI="${ESVN_REPO_URI%/}" 177 local wc_path=${ESVN_PROJECT}/${repo_uri##*/}
155 ESVN_CO_DIR="${ESVN_PROJECT}/${ESVN_REPO_URI##*/}"
156 178
157 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\"" 179 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\""
158 180
159 if [ ! -d "${ESVN_CO_DIR}/.svn" ]; then 181 if [[ ! -d "${wc_path}/.svn" ]]; then
160 # first check out 182 # first check out
161 einfo "subversion check out start -->" 183 einfo "subversion check out start -->"
162 einfo " repository: ${ESVN_REPO_URI}" 184 einfo " repository: ${repo_uri}"
163 185
164 mkdir -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}." 186 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}" 187 cd "${ESVN_PROJECT}"
167 ${ESVN_FETCH_CMD} ${ESVN_OPTIONS} "${ESVN_REPO_URI}" || die "${ESVN}: can't fetch from ${ESVN_REPO_URI}." 188 ${ESVN_FETCH_CMD} ${ESVN_OPTIONS} "${repo_uri}" || die "${ESVN}: can't fetch from ${repo_uri}."
168 189
169 else 190 else
170 # update working copy 191 # update working copy
171 einfo "subversion update start -->" 192 einfo "subversion update start -->"
172 einfo " repository: ${ESVN_REPO_URI}" 193 einfo " repository: ${repo_uri}"
173 194
174 cd "${ESVN_CO_DIR}" 195 cd "${wc_path}"
175 ${ESVN_UPDATE_CMD} ${ESVN_OPTIONS} || die "${ESVN}: can't update from ${ESVN_REPO_URI}." 196 ${ESVN_UPDATE_CMD} ${ESVN_OPTIONS} || die "${ESVN}: can't update from ${repo_uri}."
176 197
177 fi 198 fi
178 199
179 einfo " working copy: ${ESVN_STORE_DIR}/${ESVN_CO_DIR}" 200 einfo " working copy: ${ESVN_STORE_DIR}/${wc_path}"
180 201
202 if ! has "export" ${ESVN_RESTRICT}; then
203 cd "${ESVN_STORE_DIR}/${wc_path}"
204
181 # export to the ${WORKDIR} 205 # export to the ${WORKDIR}
182 # "svn export" has a bug. see http://bugs.gentoo.org/119236 206 #* "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}." 207 #* svn export . "${S}" || die "${ESVN}: can't export to ${S}."
184 rsync -a --exclude=".svn/" "${ESVN_STORE_DIR}/${ESVN_CO_DIR}/" "${S}" || die "${ESVN}: can't export to ${S}." 208 rsync -rlpgo --exclude=".svn/" . "${S}" || die "${ESVN}: can't export to ${S}."
209 fi
210
185 echo 211 echo
186 212
187} 213}
188 214
189 215
190## -- subversion_bootstrap() ------------------------------------------------ # 216## -- subversion_bootstrap() ------------------------------------------------ #
191 217
192function subversion_bootstrap() { 218function subversion_bootstrap() {
193 219
194 local patch lpatch 220 if has "export" ${ESVN_RESTRICT}; then
221 return
222 fi
195 223
196 cd "${S}" 224 cd "${S}"
197 225
198 if [ "${ESVN_PATCHES}" ]; then 226 if [[ -n "${ESVN_PATCHES}" ]]; then
199 einfo "apply patches -->" 227 einfo "apply patches -->"
200 228
229 local p=
230
201 for patch in ${ESVN_PATCHES}; do 231 for p in ${ESVN_PATCHES}; do
202 if [ -f "${patch}" ]; then 232 if [[ -f "${p}" ]]; then
203 epatch ${patch} 233 epatch "${p}"
204 234
205 else 235 else
236 local q=
237
206 for lpatch in ${FILESDIR}/${patch}; do 238 for q in ${FILESDIR}/${p}; do
207 if [ -f "${lpatch}" ]; then 239 if [[ -f "${q}" ]]; then
208 epatch ${lpatch} 240 epatch "${q}"
209 241
210 else 242 else
211 die "${ESVN}; ${patch} is not found" 243 die "${ESVN}; ${p} is not found"
212 244
213 fi 245 fi
214 done 246 done
215 fi 247 fi
216 done 248 done
249
217 echo 250 echo
218 fi
219 251
252 fi
253
220 if [ "${ESVN_BOOTSTRAP}" ]; then 254 if [[ -n "${ESVN_BOOTSTRAP}" ]]; then
221 einfo "begin bootstrap -->" 255 einfo "begin bootstrap -->"
222 256
223 if [ -f "${ESVN_BOOTSTRAP}" -a -x "${ESVN_BOOTSTRAP}" ]; then 257 if [[ -f "${ESVN_BOOTSTRAP}" && -x "${ESVN_BOOTSTRAP}" ]]; then
224 einfo " bootstrap with a file: ${ESVN_BOOTSTRAP}" 258 einfo " bootstrap with a file: ${ESVN_BOOTSTRAP}"
225 eval "./${ESVN_BOOTSTRAP}" || die "${ESVN}: can't execute ESVN_BOOTSTRAP." 259 eval "./${ESVN_BOOTSTRAP}" || die "${ESVN}: can't execute ESVN_BOOTSTRAP."
226 260
227 else 261 else
228 einfo " bootstrap with commands: ${ESVN_BOOTSTRAP}" 262 einfo " bootstrap with commands: ${ESVN_BOOTSTRAP}"
236 270
237## -- subversion_src_unpack() ------------------------------------------------ # 271## -- subversion_src_unpack() ------------------------------------------------ #
238 272
239function subversion_src_unpack() { 273function subversion_src_unpack() {
240 274
241 subversion_svn_fetch || die "${ESVN}: unknown problem in subversion_svn_fetch()." 275 subversion_fetch || die "${ESVN}: unknown problem in subversion_fetch()."
242 subversion_bootstrap || die "${ESVN}: unknown problem in subversion_bootstrap()." 276 subversion_bootstrap || die "${ESVN}: unknown problem in subversion_bootstrap()."
243 277
244} 278}
279
280
281## -- subversion_wc_info() --------------------------------------------------- #
282
283function 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}

Legend:
Removed from v.1.31  
changed lines
  Added in v.1.33

  ViewVC Help
Powered by ViewVC 1.1.20