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

Contents of /eclass/subversion.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.79 - (hide annotations) (download)
Sun Jun 10 11:31:12 2012 UTC (2 years, 2 months ago) by hattya
Branch: MAIN
Changes since 1.78: +41 -41 lines
reorder public functions

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

  ViewVC Help
Powered by ViewVC 1.1.20