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

Contents of /eclass/subversion.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.80 - (hide annotations) (download)
Sun Jul 29 03:37:37 2012 UTC (20 months, 3 weeks ago) by hattya
Branch: MAIN
Changes since 1.79: +1 -3 lines
remove DESCRIPTION variable wrt bug #428304

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

  ViewVC Help
Powered by ViewVC 1.1.20