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

Contents of /eclass/subversion.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.72 - (hide annotations) (download)
Tue Dec 27 22:40:50 2011 UTC (2 years, 6 months ago) by neurogeek
Branch: MAIN
Changes since 1.71: +20 -2 lines
Handle UUID mismatch by deleting working copy and checking out it again. Patch by Arfrever.

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

  ViewVC Help
Powered by ViewVC 1.1.20