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

Contents of /eclass/subversion.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.78 - (hide annotations) (download)
Sun Jun 10 11:05:46 2012 UTC (2 years, 6 months ago) by hattya
Branch: MAIN
Changes since 1.77: +6 -7 lines
fixes bug #416743.

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.78 # $Header: /var/cvsroot/gentoo-x86/eclass/subversion.eclass,v 1.77 2012/06/10 10:08:36 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_src_unpack
410     # @DESCRIPTION:
411 arfrever 1.64 # Default src_unpack. Fetch and, in older EAPIs, bootstrap.
412 zlin 1.46 subversion_src_unpack() {
413 hattya 1.77 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch."
414 arfrever 1.67 if has "${EAPI:-0}" 0 1; then
415     subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
416     fi
417 arfrever 1.64 }
418    
419     # @FUNCTION: subversion_src_prepare
420     # @DESCRIPTION:
421     # Default src_prepare. Bootstrap.
422     subversion_src_prepare() {
423 hattya 1.34 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
424 hattya 1.1 }
425 hattya 1.33
426 zlin 1.46 # @FUNCTION: subversion_wc_info
427     # @USAGE: [repo_uri]
428 cardoe 1.47 # @RETURN: ESVN_WC_URL, ESVN_WC_ROOT, ESVN_WC_UUID, ESVN_WC_REVISION and ESVN_WC_PATH
429 zlin 1.46 # @DESCRIPTION:
430     # Get svn info for the specified repo_uri. The default repo_uri is ESVN_REPO_URI.
431 hattya 1.39 #
432 zlin 1.46 # The working copy information on the specified repository URI are set to
433 hattya 1.45 # ESVN_WC_* variables.
434 zlin 1.46 subversion_wc_info() {
435 zlin 1.54 local repo_uri="$(subversion__get_repository_uri "${1:-${ESVN_REPO_URI}}")"
436 hattya 1.39 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
437    
438     debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
439     debug-print "${FUNCNAME}: wc_path = ${wc_path}"
440    
441 zlin 1.46 if [[ ! -d ${wc_path} ]]; then
442 hattya 1.39 return 1
443     fi
444    
445 cardoe 1.47 export ESVN_WC_URL="$(subversion__svn_info "${wc_path}" "URL")"
446     export ESVN_WC_ROOT="$(subversion__svn_info "${wc_path}" "Repository Root")"
447     export ESVN_WC_UUID="$(subversion__svn_info "${wc_path}" "Repository UUID")"
448     export ESVN_WC_REVISION="$(subversion__svn_info "${wc_path}" "Revision")"
449 hattya 1.45 export ESVN_WC_PATH="${wc_path}"
450 hattya 1.39 }
451    
452     ## -- Private Functions
453    
454     ## -- subversion__svn_info() ------------------------------------------------- #
455     #
456 zlin 1.46 # param $1 - a target.
457     # param $2 - a key name.
458 hattya 1.39 #
459 zlin 1.46 subversion__svn_info() {
460 hattya 1.39 local target="${1}"
461     local key="${2}"
462    
463 hattya 1.77 env LC_ALL=C svn info ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" "${target}" \
464     | grep -i "^${key}" \
465     | cut -d" " -f2-
466 hattya 1.39 }
467    
468     ## -- subversion__get_repository_uri() --------------------------------------- #
469     #
470 zlin 1.46 # param $1 - a repository URI.
471     subversion__get_repository_uri() {
472 hattya 1.77 local repo_uri="${1}"
473 hattya 1.39
474     debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
475 zlin 1.46 if [[ -z ${repo_uri} ]]; then
476 hattya 1.39 die "${ESVN}: ESVN_REPO_URI (or specified URI) is empty."
477     fi
478 hattya 1.33 # delete trailing slash
479 zlin 1.46 if [[ -z ${repo_uri##*/} ]]; then
480 hattya 1.33 repo_uri="${repo_uri%/}"
481     fi
482 cardoe 1.47 repo_uri="${repo_uri%@*}"
483 hattya 1.39
484     echo "${repo_uri}"
485     }
486    
487     ## -- subversion__get_wc_path() ---------------------------------------------- #
488     #
489 zlin 1.46 # param $1 - a repository URI.
490     subversion__get_wc_path() {
491 cardoe 1.47 local repo_uri="$(subversion__get_repository_uri "${1}")"
492 hattya 1.39
493     debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
494    
495     echo "${ESVN_STORE_DIR}/${ESVN_PROJECT}/${repo_uri##*/}"
496     }
497    
498 cardoe 1.47 ## -- subversion__get_peg_revision() ----------------------------------------- #
499 hattya 1.39 #
500 zlin 1.46 # param $1 - a repository URI.
501 cardoe 1.47 subversion__get_peg_revision() {
502 hattya 1.39 local repo_uri="${1}"
503 hattya 1.77 local peg_rev=
504 hattya 1.39
505     debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
506 hattya 1.77 # repo_uri has peg revision?
507     if [[ ${repo_uri} = *@* ]]; then
508     peg_rev="${repo_uri##*@}"
509     debug-print "${FUNCNAME}: peg_rev = ${peg_rev}"
510     else
511 hattya 1.39 debug-print "${FUNCNAME}: repo_uri does not have a peg revision."
512 hattya 1.33 fi
513 zlin 1.49
514 cardoe 1.47 echo "${peg_rev}"
515 hattya 1.33 }
516 zlin 1.50
517     # @FUNCTION: subversion_pkg_preinst
518 zlin 1.55 # @USAGE: [repo_uri]
519 zlin 1.50 # @DESCRIPTION:
520     # Log the svn revision of source code. Doing this in pkg_preinst because we
521     # want the logs to stick around if packages are uninstalled without messing with
522     # config protection.
523     subversion_pkg_preinst() {
524     local pkgdate=$(date "+%Y%m%d %H:%M:%S")
525 hattya 1.78 subversion_wc_info "${1}"
526 zlin 1.50 if [[ -n ${ESCM_LOGDIR} ]]; then
527     local dir="${ROOT}/${ESCM_LOGDIR}/${CATEGORY}"
528     if [[ ! -d ${dir} ]]; then
529 hattya 1.78 mkdir -p "${dir}" || eerror "Failed to create '${dir}' for logging svn revision"
530 zlin 1.50 fi
531     local logmessage="svn: ${pkgdate} - ${PF}:${SLOT} was merged at revision ${ESVN_WC_REVISION}"
532     if [[ -d ${dir} ]]; then
533 hattya 1.78 echo "${logmessage}" >>"${dir}/${PN}.log"
534 zlin 1.50 else
535     eerror "Could not log the message '${logmessage}' to '${dir}/${PN}.log'"
536     fi
537     fi
538 zlin 1.51 }

  ViewVC Help
Powered by ViewVC 1.1.20