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

Contents of /eclass/subversion.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.76 - (hide annotations) (download)
Sun Apr 1 19:19:40 2012 UTC (2 years, 4 months ago) by floppym
Branch: MAIN
Changes since 1.75: +2 -2 lines
ESCM_OFFLINE -> EVCS_OFFLINE. Bug 410471.

1 floppym 1.73 # Copyright 1999-2012 Gentoo Foundation
2 hattya 1.1 # Distributed under the terms of the GNU General Public License v2
3 floppym 1.76 # $Header: /var/cvsroot/gentoo-x86/eclass/subversion.eclass,v 1.75 2012/02/21 18:03:49 jlec Exp $
4 hattya 1.1
5 zlin 1.46 # @ECLASS: subversion.eclass
6     # @MAINTAINER:
7     # Akinori Hattori <hattya@gentoo.org>
8     # Bo ├śrsted Andresen <zlin@gentoo.org>
9 arfrever 1.61 # Arfrever Frehtes Taifersar Arahesis <arfrever@gentoo.org>
10 vapier 1.70 # @AUTHOR:
11 zlin 1.46 # Original Author: Akinori Hattori <hattya@gentoo.org>
12     # @BLURB: The subversion eclass is written to fetch software sources from subversion repositories
13     # @DESCRIPTION:
14     # The subversion eclass provides functions to fetch, patch and bootstrap
15     # software sources from subversion repositories.
16 hattya 1.1
17 hattya 1.8 inherit eutils
18 hattya 1.1
19 zlin 1.46 ESVN="${ECLASS}"
20 hattya 1.1
21 scarabeus 1.65 case "${EAPI:-0}" in
22 arfrever 1.67 0|1)
23     EXPORT_FUNCTIONS src_unpack pkg_preinst
24     ;;
25     *)
26     EXPORT_FUNCTIONS src_unpack src_prepare pkg_preinst
27     ;;
28 scarabeus 1.65 esac
29 hattya 1.1
30 hattya 1.5 DESCRIPTION="Based on the ${ECLASS} eclass"
31 hattya 1.1
32 arfrever 1.68 SUBVERSION_DEPEND="dev-vcs/subversion
33 zlin 1.46 net-misc/rsync"
34 hattya 1.1
35 arfrever 1.67 if [[ -z "${ESVN_DISABLE_DEPENDENCIES}" ]]; then
36     DEPEND="${SUBVERSION_DEPEND}"
37     fi
38    
39 zlin 1.46 # @ECLASS-VARIABLE: ESVN_STORE_DIR
40     # @DESCRIPTION:
41     # subversion sources store directory. Users may override this in /etc/make.conf
42     [[ -z ${ESVN_STORE_DIR} ]] && ESVN_STORE_DIR="${PORTAGE_ACTUAL_DISTDIR:-${DISTDIR}}/svn-src"
43    
44     # @ECLASS-VARIABLE: ESVN_FETCH_CMD
45     # @DESCRIPTION:
46     # subversion checkout command
47 hattya 1.25 ESVN_FETCH_CMD="svn checkout"
48    
49 zlin 1.46 # @ECLASS-VARIABLE: ESVN_UPDATE_CMD
50     # @DESCRIPTION:
51     # subversion update command
52 hattya 1.25 ESVN_UPDATE_CMD="svn update"
53 hattya 1.1
54 cardoe 1.48 # @ECLASS-VARIABLE: ESVN_SWITCH_CMD
55     # @DESCRIPTION:
56     # subversion switch command
57     ESVN_SWITCH_CMD="svn switch"
58    
59 zlin 1.46 # @ECLASS-VARIABLE: ESVN_OPTIONS
60     # @DESCRIPTION:
61     # the options passed to checkout or update. If you want a specific revision see
62     # ESVN_REPO_URI instead of using -rREV.
63     ESVN_OPTIONS="${ESVN_OPTIONS:-}"
64    
65     # @ECLASS-VARIABLE: ESVN_REPO_URI
66     # @DESCRIPTION:
67     # repository uri
68 hattya 1.1 #
69 zlin 1.46 # e.g. http://foo/trunk, svn://bar/trunk, svn://bar/branch/foo@1234
70 hattya 1.12 #
71     # supported protocols:
72     # http://
73     # https://
74     # svn://
75 hattya 1.33 # svn+ssh://
76 hattya 1.1 #
77 zlin 1.46 # to peg to a specific revision, append @REV to the repo's uri
78     ESVN_REPO_URI="${ESVN_REPO_URI:-}"
79 hattya 1.1
80 cardoe 1.47 # @ECLASS-VARIABLE: ESVN_REVISION
81     # @DESCRIPTION:
82     # User configurable revision checkout or update to from the repository
83     #
84     # Useful for live svn or trunk svn ebuilds allowing the user to peg
85     # to a specific revision
86     #
87     # Note: This should never be set in an ebuild!
88     ESVN_REVISION="${ESVN_REVISION:-}"
89    
90 arfrever 1.63 # @ECLASS-VARIABLE: ESVN_USER
91     # @DESCRIPTION:
92     # User name
93     ESVN_USER="${ESVN_USER:-}"
94    
95     # @ECLASS-VARIABLE: ESVN_PASSWORD
96     # @DESCRIPTION:
97     # Password
98     ESVN_PASSWORD="${ESVN_PASSWORD:-}"
99    
100 zlin 1.46 # @ECLASS-VARIABLE: ESVN_PROJECT
101     # @DESCRIPTION:
102     # project name of your ebuild (= name space)
103 hattya 1.1 #
104     # subversion eclass will check out the subversion repository like:
105     #
106     # ${ESVN_STORE_DIR}/${ESVN_PROJECT}/${ESVN_REPO_URI##*/}
107     #
108     # so if you define ESVN_REPO_URI as http://svn.collab.net/repo/svn/trunk or
109     # http://svn.collab.net/repo/svn/trunk/. and PN is subversion-svn.
110     # it will check out like:
111     #
112     # ${ESVN_STORE_DIR}/subversion/trunk
113     #
114 hattya 1.33 # this is not used in order to declare the name of the upstream project.
115     # so that you can declare this like:
116     #
117     # # jakarta commons-loggin
118     # ESVN_PROJECT=commons/logging
119     #
120 hattya 1.1 # default: ${PN/-svn}.
121 zlin 1.46 ESVN_PROJECT="${ESVN_PROJECT:-${PN/-svn}}"
122 hattya 1.1
123 zlin 1.46 # @ECLASS-VARIABLE: ESVN_BOOTSTRAP
124     # @DESCRIPTION:
125 hattya 1.8 # bootstrap script or command like autogen.sh or etc..
126 zlin 1.46 ESVN_BOOTSTRAP="${ESVN_BOOTSTRAP:-}"
127 hattya 1.1
128 zlin 1.46 # @ECLASS-VARIABLE: ESVN_PATCHES
129     # @DESCRIPTION:
130     # subversion eclass can apply patches in subversion_bootstrap().
131 peper 1.43 # you can use regexp in this variable like *.diff or *.patch or etc.
132     # NOTE: patches will be applied before ESVN_BOOTSTRAP is processed.
133 hattya 1.8 #
134 zlin 1.46 # Patches are searched both in ${PWD} and ${FILESDIR}, if not found in either
135     # location, the installation dies.
136     ESVN_PATCHES="${ESVN_PATCHES:-}"
137 hattya 1.33
138 zlin 1.46 # @ECLASS-VARIABLE: ESVN_RESTRICT
139     # @DESCRIPTION:
140 hattya 1.39 # this should be a space delimited list of subversion eclass features to
141     # restrict.
142 hattya 1.33 # export)
143     # don't export the working copy to S.
144 zlin 1.46 ESVN_RESTRICT="${ESVN_RESTRICT:-}"
145 hattya 1.45
146 arfrever 1.67 # @ECLASS-VARIABLE: ESVN_DISABLE_DEPENDENCIES
147     # @DESCRIPTION:
148     # Set this variable to a non-empty value to disable the automatic inclusion of
149     # Subversion in dependencies.
150     ESVN_DISABLE_DEPENDENCIES="${ESVN_DISABLE_DEPENDENCIES:-}"
151    
152 zlin 1.49 # @ECLASS-VARIABLE: ESVN_OFFLINE
153     # @DESCRIPTION:
154     # Set this variable to a non-empty value to disable the automatic updating of
155     # an svn source tree. This is intended to be set outside the subversion source
156     # tree by users.
157 floppym 1.76 ESVN_OFFLINE="${ESVN_OFFLINE:-${EVCS_OFFLINE}}"
158 zlin 1.49
159 floppym 1.73 # @ECLASS-VARIABLE: ESVN_UMASK
160     # @DESCRIPTION:
161 vapier 1.74 # Set this variable to a custom umask. This is intended to be set by users.
162     # By setting this to something like 002, it can make life easier for people
163     # who do development as non-root (but are in the portage group), and then
164     # switch over to building with FEATURES=userpriv. Or vice-versa. Shouldn't
165     # be a security issue here as anyone who has portage group write access
166     # already can screw the system over in more creative ways.
167 floppym 1.73 ESVN_UMASK="${ESVN_UMASK:-${EVCS_UMASK}}"
168    
169 zlin 1.52 # @ECLASS-VARIABLE: ESVN_UP_FREQ
170     # @DESCRIPTION:
171     # Set the minimum number of hours between svn up'ing in any given svn module. This is particularly
172     # useful for split KDE ebuilds where we want to ensure that all submodules are compiled for the same
173     # revision. It should also be kept user overrideable.
174     ESVN_UP_FREQ="${ESVN_UP_FREQ:=}"
175    
176 zlin 1.50 # @ECLASS-VARIABLE: ESCM_LOGDIR
177     # @DESCRIPTION:
178     # User configuration variable. If set to a path such as e.g. /var/log/scm any
179     # package inheriting from subversion.eclass will record svn revision to
180     # ${CATEGORY}/${PN}.log in that path in pkg_preinst. This is not supposed to be
181     # set by ebuilds/eclasses. It defaults to empty so users need to opt in.
182     ESCM_LOGDIR="${ESCM_LOGDIR:=}"
183    
184 zlin 1.46 # @FUNCTION: subversion_fetch
185     # @USAGE: [repo_uri] [destination]
186     # @DESCRIPTION:
187     # Wrapper function to fetch sources from subversion via svn checkout or svn update,
188     # depending on whether there is an existing working copy in ${ESVN_STORE_DIR}.
189     #
190     # Can take two optional parameters:
191     # repo_uri - a repository URI. default is ESVN_REPO_URI.
192     # destination - a check out path in S.
193     subversion_fetch() {
194 zlin 1.54 local repo_uri="$(subversion__get_repository_uri "${1:-${ESVN_REPO_URI}}")"
195 cardoe 1.47 local revision="$(subversion__get_peg_revision "${1:-${ESVN_REPO_URI}}")"
196 hattya 1.39 local S_dest="${2}"
197 hattya 1.25
198 zlin 1.51 if [[ -z ${repo_uri} ]]; then
199     die "${ESVN}: ESVN_REPO_URI (or specified URI) is empty."
200     fi
201    
202 cardoe 1.47 [[ -n "${ESVN_REVISION}" ]] && revision="${ESVN_REVISION}"
203    
204 hattya 1.33 # check for the protocol
205 hattya 1.39 local protocol="${repo_uri%%:*}"
206 hattya 1.1
207 hattya 1.33 case "${protocol}" in
208 vapier 1.24 http|https)
209 arfrever 1.68 if ! built_with_use -o dev-vcs/subversion webdav-neon webdav-serf; then
210 hattya 1.34 echo
211 vapier 1.24 eerror "In order to emerge this package, you need to"
212 hollow 1.58 eerror "reinstall Subversion with support for WebDAV."
213     eerror "Subversion requires either Neon or Serf to support WebDAV."
214 hattya 1.34 echo
215 hollow 1.58 die "${ESVN}: reinstall Subversion with support for WebDAV."
216 vapier 1.24 fi
217     ;;
218 hattya 1.33 svn|svn+ssh)
219     ;;
220 hattya 1.5 *)
221 zlin 1.46 die "${ESVN}: fetch from '${protocol}' is not yet implemented."
222 hattya 1.5 ;;
223     esac
224 hattya 1.1
225 hattya 1.38 addread "/etc/subversion"
226     addwrite "${ESVN_STORE_DIR}"
227    
228 floppym 1.73 if [[ -n "${ESVN_UMASK}" ]]; then
229     eumask_push "${ESVN_UMASK}"
230     fi
231    
232 zlin 1.46 if [[ ! -d ${ESVN_STORE_DIR} ]]; then
233 hattya 1.17 debug-print "${FUNCNAME}: initial checkout. creating subversion directory"
234 vapier 1.71 mkdir -m 775 -p "${ESVN_STORE_DIR}" || die "${ESVN}: can't mkdir ${ESVN_STORE_DIR}."
235 hattya 1.1 fi
236    
237 jlec 1.69 pushd "${ESVN_STORE_DIR}" > /dev/null || die "${ESVN}: can't chdir to ${ESVN_STORE_DIR}"
238 hattya 1.1
239 hattya 1.39 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
240 hattya 1.38 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion"
241 hattya 1.1
242 cardoe 1.47 [[ -n "${revision}" ]] && options="${options} -r ${revision}"
243    
244     if [[ "${ESVN_OPTIONS}" = *-r* ]]; then
245     ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please"
246     ewarn "see \${ESVN_REPO_URI}"
247     fi
248    
249 arfrever 1.68 if has_version ">=dev-vcs/subversion-1.6.0"; then
250 arfrever 1.61 options="${options} --config-option=config:auth:password-stores="
251     fi
252    
253 hattya 1.39 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\""
254 hattya 1.25 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\""
255 hattya 1.38 debug-print "${FUNCNAME}: options = \"${options}\""
256 joker 1.37
257 zlin 1.46 if [[ ! -d ${wc_path}/.svn ]]; then
258 zlin 1.53 if [[ -n ${ESVN_OFFLINE} ]]; then
259 arfrever 1.63 ewarn "ESVN_OFFLINE cannot be used when there is no existing checkout."
260 zlin 1.53 fi
261 hattya 1.1 # first check out
262     einfo "subversion check out start -->"
263 cardoe 1.47 einfo " repository: ${repo_uri}${revision:+@}${revision}"
264 hattya 1.1
265 hattya 1.39 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}"
266    
267 vapier 1.71 mkdir -m 775 -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}."
268 hattya 1.39 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}"
269 arfrever 1.63 if [[ -n "${ESVN_USER}" ]]; then
270     ${ESVN_FETCH_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
271     else
272     ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
273     fi
274 hattya 1.12
275 zlin 1.49 elif [[ -n ${ESVN_OFFLINE} ]]; then
276 arfrever 1.67 svn upgrade "${wc_path}" &>/dev/null
277     svn cleanup "${wc_path}" &>/dev/null
278 zlin 1.49 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy."
279     if [[ -n ${ESVN_REVISION} && ${ESVN_REVISION} != ${ESVN_WC_REVISION} ]]; then
280     die "${ESVN}: You requested off-line updating and revision ${ESVN_REVISION} but only revision ${ESVN_WC_REVISION} is available locally."
281     fi
282 zlin 1.56 einfo "Fetching disabled: Using existing repository copy at revision ${ESVN_WC_REVISION}."
283 hattya 1.1 else
284 arfrever 1.67 svn upgrade "${wc_path}" &>/dev/null
285     svn cleanup "${wc_path}" &>/dev/null
286 peper 1.44 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy."
287 hattya 1.45
288 zlin 1.52 local esvn_up_freq=
289     if [[ -n ${ESVN_UP_FREQ} ]]; then
290     if [[ -n ${ESVN_UP_FREQ//[[:digit:]]} ]]; then
291     die "${ESVN}: ESVN_UP_FREQ must be an integer value corresponding to the minimum number of hours between svn up."
292     elif [[ -z $(find "${wc_path}/.svn/entries" -mmin "+$((ESVN_UP_FREQ*60))") ]]; then
293 zlin 1.56 einfo "Fetching disabled since ${ESVN_UP_FREQ} hours has not passed since last update."
294     einfo "Using existing repository copy at revision ${ESVN_WC_REVISION}."
295 zlin 1.52 esvn_up_freq=no_update
296     fi
297     fi
298    
299     if [[ -z ${esvn_up_freq} ]]; then
300 neurogeek 1.72 if [[ ${ESVN_WC_UUID} != $(subversion__svn_info "${repo_uri}" "Repository UUID") ]]; then
301     # UUID mismatch. Delete working copy and check out it again.
302     einfo "subversion recheck out start -->"
303     einfo " old UUID: ${ESVN_WC_UUID}"
304     einfo " new UUID: $(subversion__svn_info "${repo_uri}" "Repository UUID")"
305     einfo " repository: ${repo_uri}${revision:+@}${revision}"
306    
307     rm -fr "${ESVN_PROJECT}" || die
308    
309     debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}"
310    
311     mkdir -m 775 -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}."
312     cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}"
313     if [[ -n "${ESVN_USER}" ]]; then
314     ${ESVN_FETCH_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
315     else
316     ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
317     fi
318     elif [[ ${ESVN_WC_URL} != $(subversion__get_repository_uri "${repo_uri}") ]]; then
319 zlin 1.57 einfo "subversion switch start -->"
320 zlin 1.52 einfo " old repository: ${ESVN_WC_URL}@${ESVN_WC_REVISION}"
321     einfo " new repository: ${repo_uri}${revision:+@}${revision}"
322 cardoe 1.48
323 zlin 1.52 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}"
324 hattya 1.34
325 zlin 1.52 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
326 arfrever 1.63 if [[ -n "${ESVN_USER}" ]]; then
327     ${ESVN_SWITCH_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" ${repo_uri} || die "${ESVN}: can't update ${wc_path} from ${repo_uri}."
328     else
329     ${ESVN_SWITCH_CMD} ${options} ${repo_uri} || die "${ESVN}: can't update ${wc_path} from ${repo_uri}."
330     fi
331 zlin 1.52 else
332     # update working copy
333     einfo "subversion update start -->"
334     einfo " repository: ${repo_uri}${revision:+@}${revision}"
335 hattya 1.25
336 zlin 1.52 debug-print "${FUNCNAME}: ${ESVN_UPDATE_CMD} ${options}"
337 hattya 1.39
338 zlin 1.52 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
339 arfrever 1.63 if [[ -n "${ESVN_USER}" ]]; then
340     ${ESVN_UPDATE_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" || die "${ESVN}: can't update ${wc_path} from ${repo_uri}."
341     else
342     ${ESVN_UPDATE_CMD} ${options} || die "${ESVN}: can't update ${wc_path} from ${repo_uri}."
343     fi
344 zlin 1.52 fi
345 cardoe 1.48 fi
346 peper 1.43 fi
347 hattya 1.1
348 floppym 1.73 if [[ -n "${ESVN_UMASK}" ]]; then
349     eumask_pop
350     fi
351    
352 hattya 1.39 einfo " working copy: ${wc_path}"
353 hattya 1.33
354     if ! has "export" ${ESVN_RESTRICT}; then
355 hattya 1.39 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
356    
357     local S="${S}/${S_dest}"
358 zlin 1.60 mkdir -p "${S}"
359 hattya 1.33
360     # export to the ${WORKDIR}
361     #* "svn export" has a bug. see http://bugs.gentoo.org/119236
362     #* svn export . "${S}" || die "${ESVN}: can't export to ${S}."
363     rsync -rlpgo --exclude=".svn/" . "${S}" || die "${ESVN}: can't export to ${S}."
364     fi
365 hattya 1.1
366 jlec 1.69 popd > /dev/null
367    
368 hattya 1.8 echo
369 hattya 1.1 }
370    
371 zlin 1.46 # @FUNCTION: subversion_bootstrap
372     # @DESCRIPTION:
373     # Apply patches in ${ESVN_PATCHES} and run ${ESVN_BOOTSTRAP} if specified.
374     subversion_bootstrap() {
375 hattya 1.33 if has "export" ${ESVN_RESTRICT}; then
376     return
377     fi
378 hattya 1.1
379 hattya 1.8 cd "${S}"
380    
381 zlin 1.46 if [[ -n ${ESVN_PATCHES} ]]; then
382 hattya 1.15 einfo "apply patches -->"
383 hattya 1.12
384 peper 1.43 local patch fpatch
385 hattya 1.45
386 peper 1.43 for patch in ${ESVN_PATCHES}; do
387 zlin 1.46 if [[ -f ${patch} ]]; then
388 peper 1.43 epatch "${patch}"
389 hattya 1.45
390 hattya 1.8 else
391 peper 1.43 for fpatch in ${FILESDIR}/${patch}; do
392 zlin 1.46 if [[ -f ${fpatch} ]]; then
393 peper 1.43 epatch "${fpatch}"
394 hattya 1.45
395 hattya 1.8 else
396 peper 1.43 die "${ESVN}: ${patch} not found"
397 hattya 1.45
398 hattya 1.8 fi
399     done
400 hattya 1.45
401 hattya 1.8 fi
402     done
403 hattya 1.45
404 hattya 1.8 echo
405     fi
406    
407 zlin 1.46 if [[ -n ${ESVN_BOOTSTRAP} ]]; then
408 hattya 1.8 einfo "begin bootstrap -->"
409 hattya 1.12
410 zlin 1.46 if [[ -f ${ESVN_BOOTSTRAP} && -x ${ESVN_BOOTSTRAP} ]]; then
411 hattya 1.8 einfo " bootstrap with a file: ${ESVN_BOOTSTRAP}"
412     eval "./${ESVN_BOOTSTRAP}" || die "${ESVN}: can't execute ESVN_BOOTSTRAP."
413 hattya 1.45
414 hattya 1.8 else
415 peper 1.43 einfo " bootstrap with command: ${ESVN_BOOTSTRAP}"
416 hattya 1.8 eval "${ESVN_BOOTSTRAP}" || die "${ESVN}: can't eval ESVN_BOOTSTRAP."
417 hattya 1.45
418 hattya 1.1 fi
419     fi
420     }
421    
422 zlin 1.46 # @FUNCTION: subversion_src_unpack
423     # @DESCRIPTION:
424 arfrever 1.64 # Default src_unpack. Fetch and, in older EAPIs, bootstrap.
425 zlin 1.46 subversion_src_unpack() {
426 hattya 1.34 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch."
427 arfrever 1.67 if has "${EAPI:-0}" 0 1; then
428     subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
429     fi
430 arfrever 1.64 }
431    
432     # @FUNCTION: subversion_src_prepare
433     # @DESCRIPTION:
434     # Default src_prepare. Bootstrap.
435     subversion_src_prepare() {
436 hattya 1.34 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
437 hattya 1.1 }
438 hattya 1.33
439 zlin 1.46 # @FUNCTION: subversion_wc_info
440     # @USAGE: [repo_uri]
441 cardoe 1.47 # @RETURN: ESVN_WC_URL, ESVN_WC_ROOT, ESVN_WC_UUID, ESVN_WC_REVISION and ESVN_WC_PATH
442 zlin 1.46 # @DESCRIPTION:
443     # Get svn info for the specified repo_uri. The default repo_uri is ESVN_REPO_URI.
444 hattya 1.39 #
445 zlin 1.46 # The working copy information on the specified repository URI are set to
446 hattya 1.45 # ESVN_WC_* variables.
447 zlin 1.46 subversion_wc_info() {
448 zlin 1.54 local repo_uri="$(subversion__get_repository_uri "${1:-${ESVN_REPO_URI}}")"
449 hattya 1.39 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
450    
451     debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
452     debug-print "${FUNCNAME}: wc_path = ${wc_path}"
453    
454 zlin 1.46 if [[ ! -d ${wc_path} ]]; then
455 hattya 1.39 return 1
456     fi
457    
458 cardoe 1.47 export ESVN_WC_URL="$(subversion__svn_info "${wc_path}" "URL")"
459     export ESVN_WC_ROOT="$(subversion__svn_info "${wc_path}" "Repository Root")"
460     export ESVN_WC_UUID="$(subversion__svn_info "${wc_path}" "Repository UUID")"
461     export ESVN_WC_REVISION="$(subversion__svn_info "${wc_path}" "Revision")"
462 hattya 1.45 export ESVN_WC_PATH="${wc_path}"
463 hattya 1.39 }
464    
465     ## -- Private Functions
466    
467     ## -- subversion__svn_info() ------------------------------------------------- #
468     #
469 zlin 1.46 # param $1 - a target.
470     # param $2 - a key name.
471 hattya 1.39 #
472 zlin 1.46 subversion__svn_info() {
473 hattya 1.39 local target="${1}"
474     local key="${2}"
475    
476 jlec 1.75 env LC_ALL=C svn info \
477     ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" \
478     "${target}" | grep -i "^${key}" | cut -d" " -f2-
479 hattya 1.39 }
480    
481     ## -- subversion__get_repository_uri() --------------------------------------- #
482     #
483 zlin 1.46 # param $1 - a repository URI.
484     subversion__get_repository_uri() {
485 zlin 1.54 local repo_uri="${1}"
486 hattya 1.39
487     debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
488 hattya 1.33
489 zlin 1.46 if [[ -z ${repo_uri} ]]; then
490 hattya 1.39 die "${ESVN}: ESVN_REPO_URI (or specified URI) is empty."
491     fi
492 hattya 1.33
493     # delete trailing slash
494 zlin 1.46 if [[ -z ${repo_uri##*/} ]]; then
495 hattya 1.33 repo_uri="${repo_uri%/}"
496     fi
497    
498 cardoe 1.47 repo_uri="${repo_uri%@*}"
499 hattya 1.39
500     echo "${repo_uri}"
501     }
502    
503     ## -- subversion__get_wc_path() ---------------------------------------------- #
504     #
505 zlin 1.46 # param $1 - a repository URI.
506     subversion__get_wc_path() {
507 cardoe 1.47 local repo_uri="$(subversion__get_repository_uri "${1}")"
508 hattya 1.39
509     debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
510    
511     echo "${ESVN_STORE_DIR}/${ESVN_PROJECT}/${repo_uri##*/}"
512     }
513    
514 cardoe 1.47 ## -- subversion__get_peg_revision() ----------------------------------------- #
515 hattya 1.39 #
516 zlin 1.46 # param $1 - a repository URI.
517 cardoe 1.47 subversion__get_peg_revision() {
518 hattya 1.39 local repo_uri="${1}"
519    
520     debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
521    
522     # repo_uri has peg revision ?
523 zlin 1.46 if [[ ${repo_uri} != *@* ]]; then
524 hattya 1.39 debug-print "${FUNCNAME}: repo_uri does not have a peg revision."
525 hattya 1.33 fi
526 zlin 1.49
527 cardoe 1.47 local peg_rev=
528     [[ ${repo_uri} = *@* ]] && peg_rev="${repo_uri##*@}"
529 hattya 1.33
530 hattya 1.39 debug-print "${FUNCNAME}: peg_rev = ${peg_rev}"
531    
532 cardoe 1.47 echo "${peg_rev}"
533 hattya 1.33 }
534 zlin 1.50
535     # @FUNCTION: subversion_pkg_preinst
536 zlin 1.55 # @USAGE: [repo_uri]
537 zlin 1.50 # @DESCRIPTION:
538     # Log the svn revision of source code. Doing this in pkg_preinst because we
539     # want the logs to stick around if packages are uninstalled without messing with
540     # config protection.
541     subversion_pkg_preinst() {
542     local pkgdate=$(date "+%Y%m%d %H:%M:%S")
543 zlin 1.55 subversion_wc_info "${1:-${ESVN_REPO_URI}}"
544 zlin 1.50 if [[ -n ${ESCM_LOGDIR} ]]; then
545     local dir="${ROOT}/${ESCM_LOGDIR}/${CATEGORY}"
546     if [[ ! -d ${dir} ]]; then
547     mkdir -p "${dir}" || \
548     eerror "Failed to create '${dir}' for logging svn revision to '${PORTDIR_SCM}'"
549     fi
550     local logmessage="svn: ${pkgdate} - ${PF}:${SLOT} was merged at revision ${ESVN_WC_REVISION}"
551     if [[ -d ${dir} ]]; then
552     echo "${logmessage}" >> "${dir}/${PN}.log"
553     else
554     eerror "Could not log the message '${logmessage}' to '${dir}/${PN}.log'"
555     fi
556     fi
557 zlin 1.51 }

  ViewVC Help
Powered by ViewVC 1.1.20