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

Contents of /eclass/subversion.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.73 - (hide annotations) (download)
Thu Feb 2 03:17:56 2012 UTC (2 years, 2 months ago) by floppym
Branch: MAIN
Changes since 1.72: +16 -2 lines
Introduce ESVN_UMASK variable to override default umask. Patch by Arfrever.

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 floppym 1.73 # $Header: /var/cvsroot/gentoo-x86/eclass/subversion.eclass,v 1.72 2011/12/27 22:40:50 neurogeek 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 floppym 1.73 # @ECLASS-VARIABLE: ESVN_UMASK
160     # @DESCRIPTION:
161     # Set this variable to custom umask.
162     # This is intended to be set by users.
163     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.1
203 hattya 1.33 case "${protocol}" in
204 vapier 1.24 http|https)
205 arfrever 1.68 if ! built_with_use -o dev-vcs/subversion webdav-neon webdav-serf; then
206 hattya 1.34 echo
207 vapier 1.24 eerror "In order to emerge this package, you need to"
208 hollow 1.58 eerror "reinstall Subversion with support for WebDAV."
209     eerror "Subversion requires either Neon or Serf to support WebDAV."
210 hattya 1.34 echo
211 hollow 1.58 die "${ESVN}: reinstall Subversion with support for WebDAV."
212 vapier 1.24 fi
213     ;;
214 hattya 1.33 svn|svn+ssh)
215     ;;
216 hattya 1.5 *)
217 zlin 1.46 die "${ESVN}: fetch from '${protocol}' is not yet implemented."
218 hattya 1.5 ;;
219     esac
220 hattya 1.1
221 hattya 1.38 addread "/etc/subversion"
222     addwrite "${ESVN_STORE_DIR}"
223    
224 floppym 1.73 if [[ -n "${ESVN_UMASK}" ]]; then
225     eumask_push "${ESVN_UMASK}"
226     fi
227    
228 zlin 1.46 if [[ ! -d ${ESVN_STORE_DIR} ]]; then
229 hattya 1.17 debug-print "${FUNCNAME}: initial checkout. creating subversion directory"
230 vapier 1.71 mkdir -m 775 -p "${ESVN_STORE_DIR}" || die "${ESVN}: can't mkdir ${ESVN_STORE_DIR}."
231 hattya 1.1 fi
232    
233 jlec 1.69 pushd "${ESVN_STORE_DIR}" > /dev/null || die "${ESVN}: can't chdir to ${ESVN_STORE_DIR}"
234 hattya 1.1
235 hattya 1.39 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
236 hattya 1.38 local options="${ESVN_OPTIONS} --config-dir ${ESVN_STORE_DIR}/.subversion"
237 hattya 1.1
238 cardoe 1.47 [[ -n "${revision}" ]] && options="${options} -r ${revision}"
239    
240     if [[ "${ESVN_OPTIONS}" = *-r* ]]; then
241     ewarn "\${ESVN_OPTIONS} contains -r, this usage is unsupported. Please"
242     ewarn "see \${ESVN_REPO_URI}"
243     fi
244    
245 arfrever 1.68 if has_version ">=dev-vcs/subversion-1.6.0"; then
246 arfrever 1.61 options="${options} --config-option=config:auth:password-stores="
247     fi
248    
249 hattya 1.39 debug-print "${FUNCNAME}: wc_path = \"${wc_path}\""
250 hattya 1.25 debug-print "${FUNCNAME}: ESVN_OPTIONS = \"${ESVN_OPTIONS}\""
251 hattya 1.38 debug-print "${FUNCNAME}: options = \"${options}\""
252 joker 1.37
253 zlin 1.46 if [[ ! -d ${wc_path}/.svn ]]; then
254 zlin 1.53 if [[ -n ${ESVN_OFFLINE} ]]; then
255 arfrever 1.63 ewarn "ESVN_OFFLINE cannot be used when there is no existing checkout."
256 zlin 1.53 fi
257 hattya 1.1 # first check out
258     einfo "subversion check out start -->"
259 cardoe 1.47 einfo " repository: ${repo_uri}${revision:+@}${revision}"
260 hattya 1.1
261 hattya 1.39 debug-print "${FUNCNAME}: ${ESVN_FETCH_CMD} ${options} ${repo_uri}"
262    
263 vapier 1.71 mkdir -m 775 -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}."
264 hattya 1.39 cd "${ESVN_PROJECT}" || die "${ESVN}: can't chdir to ${ESVN_PROJECT}"
265 arfrever 1.63 if [[ -n "${ESVN_USER}" ]]; then
266     ${ESVN_FETCH_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
267     else
268     ${ESVN_FETCH_CMD} ${options} "${repo_uri}" || die "${ESVN}: can't fetch to ${wc_path} from ${repo_uri}."
269     fi
270 hattya 1.12
271 zlin 1.49 elif [[ -n ${ESVN_OFFLINE} ]]; then
272 arfrever 1.67 svn upgrade "${wc_path}" &>/dev/null
273     svn cleanup "${wc_path}" &>/dev/null
274 zlin 1.49 subversion_wc_info "${repo_uri}" || die "${ESVN}: unknown problem occurred while accessing working copy."
275     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 jlec 1.69 popd > /dev/null
363    
364 hattya 1.8 echo
365 hattya 1.1 }
366    
367 zlin 1.46 # @FUNCTION: subversion_bootstrap
368     # @DESCRIPTION:
369     # Apply patches in ${ESVN_PATCHES} and run ${ESVN_BOOTSTRAP} if specified.
370     subversion_bootstrap() {
371 hattya 1.33 if has "export" ${ESVN_RESTRICT}; then
372     return
373     fi
374 hattya 1.1
375 hattya 1.8 cd "${S}"
376    
377 zlin 1.46 if [[ -n ${ESVN_PATCHES} ]]; then
378 hattya 1.15 einfo "apply patches -->"
379 hattya 1.12
380 peper 1.43 local patch fpatch
381 hattya 1.45
382 peper 1.43 for patch in ${ESVN_PATCHES}; do
383 zlin 1.46 if [[ -f ${patch} ]]; then
384 peper 1.43 epatch "${patch}"
385 hattya 1.45
386 hattya 1.8 else
387 peper 1.43 for fpatch in ${FILESDIR}/${patch}; do
388 zlin 1.46 if [[ -f ${fpatch} ]]; then
389 peper 1.43 epatch "${fpatch}"
390 hattya 1.45
391 hattya 1.8 else
392 peper 1.43 die "${ESVN}: ${patch} not found"
393 hattya 1.45
394 hattya 1.8 fi
395     done
396 hattya 1.45
397 hattya 1.8 fi
398     done
399 hattya 1.45
400 hattya 1.8 echo
401     fi
402    
403 zlin 1.46 if [[ -n ${ESVN_BOOTSTRAP} ]]; then
404 hattya 1.8 einfo "begin bootstrap -->"
405 hattya 1.12
406 zlin 1.46 if [[ -f ${ESVN_BOOTSTRAP} && -x ${ESVN_BOOTSTRAP} ]]; then
407 hattya 1.8 einfo " bootstrap with a file: ${ESVN_BOOTSTRAP}"
408     eval "./${ESVN_BOOTSTRAP}" || die "${ESVN}: can't execute ESVN_BOOTSTRAP."
409 hattya 1.45
410 hattya 1.8 else
411 peper 1.43 einfo " bootstrap with command: ${ESVN_BOOTSTRAP}"
412 hattya 1.8 eval "${ESVN_BOOTSTRAP}" || die "${ESVN}: can't eval ESVN_BOOTSTRAP."
413 hattya 1.45
414 hattya 1.1 fi
415     fi
416     }
417    
418 zlin 1.46 # @FUNCTION: subversion_src_unpack
419     # @DESCRIPTION:
420 arfrever 1.64 # Default src_unpack. Fetch and, in older EAPIs, bootstrap.
421 zlin 1.46 subversion_src_unpack() {
422 hattya 1.34 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch."
423 arfrever 1.67 if has "${EAPI:-0}" 0 1; then
424     subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
425     fi
426 arfrever 1.64 }
427    
428     # @FUNCTION: subversion_src_prepare
429     # @DESCRIPTION:
430     # Default src_prepare. Bootstrap.
431     subversion_src_prepare() {
432 hattya 1.34 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
433 hattya 1.1 }
434 hattya 1.33
435 zlin 1.46 # @FUNCTION: subversion_wc_info
436     # @USAGE: [repo_uri]
437 cardoe 1.47 # @RETURN: ESVN_WC_URL, ESVN_WC_ROOT, ESVN_WC_UUID, ESVN_WC_REVISION and ESVN_WC_PATH
438 zlin 1.46 # @DESCRIPTION:
439     # Get svn info for the specified repo_uri. The default repo_uri is ESVN_REPO_URI.
440 hattya 1.39 #
441 zlin 1.46 # The working copy information on the specified repository URI are set to
442 hattya 1.45 # ESVN_WC_* variables.
443 zlin 1.46 subversion_wc_info() {
444 zlin 1.54 local repo_uri="$(subversion__get_repository_uri "${1:-${ESVN_REPO_URI}}")"
445 hattya 1.39 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
446    
447     debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
448     debug-print "${FUNCNAME}: wc_path = ${wc_path}"
449    
450 zlin 1.46 if [[ ! -d ${wc_path} ]]; then
451 hattya 1.39 return 1
452     fi
453    
454 cardoe 1.47 export ESVN_WC_URL="$(subversion__svn_info "${wc_path}" "URL")"
455     export ESVN_WC_ROOT="$(subversion__svn_info "${wc_path}" "Repository Root")"
456     export ESVN_WC_UUID="$(subversion__svn_info "${wc_path}" "Repository UUID")"
457     export ESVN_WC_REVISION="$(subversion__svn_info "${wc_path}" "Revision")"
458 hattya 1.45 export ESVN_WC_PATH="${wc_path}"
459 hattya 1.39 }
460    
461     ## -- Private Functions
462    
463     ## -- subversion__svn_info() ------------------------------------------------- #
464     #
465 zlin 1.46 # param $1 - a target.
466     # param $2 - a key name.
467 hattya 1.39 #
468 zlin 1.46 subversion__svn_info() {
469 hattya 1.39 local target="${1}"
470     local key="${2}"
471    
472     env LC_ALL=C svn info "${target}" | grep -i "^${key}" | cut -d" " -f2-
473     }
474    
475     ## -- subversion__get_repository_uri() --------------------------------------- #
476     #
477 zlin 1.46 # param $1 - a repository URI.
478     subversion__get_repository_uri() {
479 zlin 1.54 local repo_uri="${1}"
480 hattya 1.39
481     debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
482 hattya 1.33
483 zlin 1.46 if [[ -z ${repo_uri} ]]; then
484 hattya 1.39 die "${ESVN}: ESVN_REPO_URI (or specified URI) is empty."
485     fi
486 hattya 1.33
487     # delete trailing slash
488 zlin 1.46 if [[ -z ${repo_uri##*/} ]]; then
489 hattya 1.33 repo_uri="${repo_uri%/}"
490     fi
491    
492 cardoe 1.47 repo_uri="${repo_uri%@*}"
493 hattya 1.39
494     echo "${repo_uri}"
495     }
496    
497     ## -- subversion__get_wc_path() ---------------------------------------------- #
498     #
499 zlin 1.46 # param $1 - a repository URI.
500     subversion__get_wc_path() {
501 cardoe 1.47 local repo_uri="$(subversion__get_repository_uri "${1}")"
502 hattya 1.39
503     debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
504    
505     echo "${ESVN_STORE_DIR}/${ESVN_PROJECT}/${repo_uri##*/}"
506     }
507    
508 cardoe 1.47 ## -- subversion__get_peg_revision() ----------------------------------------- #
509 hattya 1.39 #
510 zlin 1.46 # param $1 - a repository URI.
511 cardoe 1.47 subversion__get_peg_revision() {
512 hattya 1.39 local repo_uri="${1}"
513    
514     debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
515    
516     # repo_uri has peg revision ?
517 zlin 1.46 if [[ ${repo_uri} != *@* ]]; then
518 hattya 1.39 debug-print "${FUNCNAME}: repo_uri does not have a peg revision."
519 hattya 1.33 fi
520 zlin 1.49
521 cardoe 1.47 local peg_rev=
522     [[ ${repo_uri} = *@* ]] && peg_rev="${repo_uri##*@}"
523 hattya 1.33
524 hattya 1.39 debug-print "${FUNCNAME}: peg_rev = ${peg_rev}"
525    
526 cardoe 1.47 echo "${peg_rev}"
527 hattya 1.33 }
528 zlin 1.50
529     # @FUNCTION: subversion_pkg_preinst
530 zlin 1.55 # @USAGE: [repo_uri]
531 zlin 1.50 # @DESCRIPTION:
532     # Log the svn revision of source code. Doing this in pkg_preinst because we
533     # want the logs to stick around if packages are uninstalled without messing with
534     # config protection.
535     subversion_pkg_preinst() {
536     local pkgdate=$(date "+%Y%m%d %H:%M:%S")
537 zlin 1.55 subversion_wc_info "${1:-${ESVN_REPO_URI}}"
538 zlin 1.50 if [[ -n ${ESCM_LOGDIR} ]]; then
539     local dir="${ROOT}/${ESCM_LOGDIR}/${CATEGORY}"
540     if [[ ! -d ${dir} ]]; then
541     mkdir -p "${dir}" || \
542     eerror "Failed to create '${dir}' for logging svn revision to '${PORTDIR_SCM}'"
543     fi
544     local logmessage="svn: ${pkgdate} - ${PF}:${SLOT} was merged at revision ${ESVN_WC_REVISION}"
545     if [[ -d ${dir} ]]; then
546     echo "${logmessage}" >> "${dir}/${PN}.log"
547     else
548     eerror "Could not log the message '${logmessage}' to '${dir}/${PN}.log'"
549     fi
550     fi
551 zlin 1.51 }

  ViewVC Help
Powered by ViewVC 1.1.20