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

Contents of /eclass/subversion.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.81 - (hide annotations) (download)
Sun Jul 29 04:26:10 2012 UTC (23 months, 3 weeks ago) by hattya
Branch: MAIN
Changes since 1.80: +2 -12 lines
remove obsolete workaround (ESVN_DISABLE_DEPENDENCIES)

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

  ViewVC Help
Powered by ViewVC 1.1.20