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

Contents of /eclass/subversion.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.70 - (hide annotations) (download)
Mon Aug 22 04:46:32 2011 UTC (3 years, 3 months ago) by vapier
Branch: MAIN
Changes since 1.69: +3 -4 lines
fix random bugs in eclass documentation, and convert to new @AUTHOR tag

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 vapier 1.70 # $Header: /var/cvsroot/gentoo-x86/eclass/subversion.eclass,v 1.69 2010/12/19 14:51:46 jlec 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 hattya 1.33 mkdir -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     mkdir -p "${ESVN_PROJECT}" || die "${ESVN}: can't mkdir ${ESVN_PROJECT}."
254     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     if [[ ${ESVN_WC_URL} != $(subversion__get_repository_uri "${repo_uri}") ]]; then
287 zlin 1.57 einfo "subversion switch start -->"
288 zlin 1.52 einfo " old repository: ${ESVN_WC_URL}@${ESVN_WC_REVISION}"
289     einfo " new repository: ${repo_uri}${revision:+@}${revision}"
290 cardoe 1.48
291 zlin 1.52 debug-print "${FUNCNAME}: ${ESVN_SWITCH_CMD} ${options} ${repo_uri}"
292 hattya 1.34
293 zlin 1.52 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
294 arfrever 1.63 if [[ -n "${ESVN_USER}" ]]; then
295     ${ESVN_SWITCH_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" ${repo_uri} || die "${ESVN}: can't update ${wc_path} from ${repo_uri}."
296     else
297     ${ESVN_SWITCH_CMD} ${options} ${repo_uri} || die "${ESVN}: can't update ${wc_path} from ${repo_uri}."
298     fi
299 zlin 1.52 else
300     # update working copy
301     einfo "subversion update start -->"
302     einfo " repository: ${repo_uri}${revision:+@}${revision}"
303 hattya 1.25
304 zlin 1.52 debug-print "${FUNCNAME}: ${ESVN_UPDATE_CMD} ${options}"
305 hattya 1.39
306 zlin 1.52 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
307 arfrever 1.63 if [[ -n "${ESVN_USER}" ]]; then
308     ${ESVN_UPDATE_CMD} ${options} --username "${ESVN_USER}" --password "${ESVN_PASSWORD}" || die "${ESVN}: can't update ${wc_path} from ${repo_uri}."
309     else
310     ${ESVN_UPDATE_CMD} ${options} || die "${ESVN}: can't update ${wc_path} from ${repo_uri}."
311     fi
312 zlin 1.52 fi
313 cardoe 1.48 fi
314 peper 1.43 fi
315 hattya 1.1
316 hattya 1.39 einfo " working copy: ${wc_path}"
317 hattya 1.33
318     if ! has "export" ${ESVN_RESTRICT}; then
319 hattya 1.39 cd "${wc_path}" || die "${ESVN}: can't chdir to ${wc_path}"
320    
321     local S="${S}/${S_dest}"
322 zlin 1.60 mkdir -p "${S}"
323 hattya 1.33
324     # export to the ${WORKDIR}
325     #* "svn export" has a bug. see http://bugs.gentoo.org/119236
326     #* svn export . "${S}" || die "${ESVN}: can't export to ${S}."
327     rsync -rlpgo --exclude=".svn/" . "${S}" || die "${ESVN}: can't export to ${S}."
328     fi
329 hattya 1.1
330 jlec 1.69 popd > /dev/null
331    
332 hattya 1.8 echo
333 hattya 1.1 }
334    
335 zlin 1.46 # @FUNCTION: subversion_bootstrap
336     # @DESCRIPTION:
337     # Apply patches in ${ESVN_PATCHES} and run ${ESVN_BOOTSTRAP} if specified.
338     subversion_bootstrap() {
339 hattya 1.33 if has "export" ${ESVN_RESTRICT}; then
340     return
341     fi
342 hattya 1.1
343 hattya 1.8 cd "${S}"
344    
345 zlin 1.46 if [[ -n ${ESVN_PATCHES} ]]; then
346 hattya 1.15 einfo "apply patches -->"
347 hattya 1.12
348 peper 1.43 local patch fpatch
349 hattya 1.45
350 peper 1.43 for patch in ${ESVN_PATCHES}; do
351 zlin 1.46 if [[ -f ${patch} ]]; then
352 peper 1.43 epatch "${patch}"
353 hattya 1.45
354 hattya 1.8 else
355 peper 1.43 for fpatch in ${FILESDIR}/${patch}; do
356 zlin 1.46 if [[ -f ${fpatch} ]]; then
357 peper 1.43 epatch "${fpatch}"
358 hattya 1.45
359 hattya 1.8 else
360 peper 1.43 die "${ESVN}: ${patch} not found"
361 hattya 1.45
362 hattya 1.8 fi
363     done
364 hattya 1.45
365 hattya 1.8 fi
366     done
367 hattya 1.45
368 hattya 1.8 echo
369     fi
370    
371 zlin 1.46 if [[ -n ${ESVN_BOOTSTRAP} ]]; then
372 hattya 1.8 einfo "begin bootstrap -->"
373 hattya 1.12
374 zlin 1.46 if [[ -f ${ESVN_BOOTSTRAP} && -x ${ESVN_BOOTSTRAP} ]]; then
375 hattya 1.8 einfo " bootstrap with a file: ${ESVN_BOOTSTRAP}"
376     eval "./${ESVN_BOOTSTRAP}" || die "${ESVN}: can't execute ESVN_BOOTSTRAP."
377 hattya 1.45
378 hattya 1.8 else
379 peper 1.43 einfo " bootstrap with command: ${ESVN_BOOTSTRAP}"
380 hattya 1.8 eval "${ESVN_BOOTSTRAP}" || die "${ESVN}: can't eval ESVN_BOOTSTRAP."
381 hattya 1.45
382 hattya 1.1 fi
383     fi
384     }
385    
386 zlin 1.46 # @FUNCTION: subversion_src_unpack
387     # @DESCRIPTION:
388 arfrever 1.64 # Default src_unpack. Fetch and, in older EAPIs, bootstrap.
389 zlin 1.46 subversion_src_unpack() {
390 hattya 1.34 subversion_fetch || die "${ESVN}: unknown problem occurred in subversion_fetch."
391 arfrever 1.67 if has "${EAPI:-0}" 0 1; then
392     subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
393     fi
394 arfrever 1.64 }
395    
396     # @FUNCTION: subversion_src_prepare
397     # @DESCRIPTION:
398     # Default src_prepare. Bootstrap.
399     subversion_src_prepare() {
400 hattya 1.34 subversion_bootstrap || die "${ESVN}: unknown problem occurred in subversion_bootstrap."
401 hattya 1.1 }
402 hattya 1.33
403 zlin 1.46 # @FUNCTION: subversion_wc_info
404     # @USAGE: [repo_uri]
405 cardoe 1.47 # @RETURN: ESVN_WC_URL, ESVN_WC_ROOT, ESVN_WC_UUID, ESVN_WC_REVISION and ESVN_WC_PATH
406 zlin 1.46 # @DESCRIPTION:
407     # Get svn info for the specified repo_uri. The default repo_uri is ESVN_REPO_URI.
408 hattya 1.39 #
409 zlin 1.46 # The working copy information on the specified repository URI are set to
410 hattya 1.45 # ESVN_WC_* variables.
411 zlin 1.46 subversion_wc_info() {
412 zlin 1.54 local repo_uri="$(subversion__get_repository_uri "${1:-${ESVN_REPO_URI}}")"
413 hattya 1.39 local wc_path="$(subversion__get_wc_path "${repo_uri}")"
414    
415     debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
416     debug-print "${FUNCNAME}: wc_path = ${wc_path}"
417    
418 zlin 1.46 if [[ ! -d ${wc_path} ]]; then
419 hattya 1.39 return 1
420     fi
421    
422 cardoe 1.47 export ESVN_WC_URL="$(subversion__svn_info "${wc_path}" "URL")"
423     export ESVN_WC_ROOT="$(subversion__svn_info "${wc_path}" "Repository Root")"
424     export ESVN_WC_UUID="$(subversion__svn_info "${wc_path}" "Repository UUID")"
425     export ESVN_WC_REVISION="$(subversion__svn_info "${wc_path}" "Revision")"
426 hattya 1.45 export ESVN_WC_PATH="${wc_path}"
427 hattya 1.39 }
428    
429     ## -- Private Functions
430    
431     ## -- subversion__svn_info() ------------------------------------------------- #
432     #
433 zlin 1.46 # param $1 - a target.
434     # param $2 - a key name.
435 hattya 1.39 #
436 zlin 1.46 subversion__svn_info() {
437 hattya 1.39 local target="${1}"
438     local key="${2}"
439    
440     env LC_ALL=C svn info "${target}" | grep -i "^${key}" | cut -d" " -f2-
441     }
442    
443     ## -- subversion__get_repository_uri() --------------------------------------- #
444     #
445 zlin 1.46 # param $1 - a repository URI.
446     subversion__get_repository_uri() {
447 zlin 1.54 local repo_uri="${1}"
448 hattya 1.39
449     debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
450 hattya 1.33
451 zlin 1.46 if [[ -z ${repo_uri} ]]; then
452 hattya 1.39 die "${ESVN}: ESVN_REPO_URI (or specified URI) is empty."
453     fi
454 hattya 1.33
455     # delete trailing slash
456 zlin 1.46 if [[ -z ${repo_uri##*/} ]]; then
457 hattya 1.33 repo_uri="${repo_uri%/}"
458     fi
459    
460 cardoe 1.47 repo_uri="${repo_uri%@*}"
461 hattya 1.39
462     echo "${repo_uri}"
463     }
464    
465     ## -- subversion__get_wc_path() ---------------------------------------------- #
466     #
467 zlin 1.46 # param $1 - a repository URI.
468     subversion__get_wc_path() {
469 cardoe 1.47 local repo_uri="$(subversion__get_repository_uri "${1}")"
470 hattya 1.39
471     debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
472    
473     echo "${ESVN_STORE_DIR}/${ESVN_PROJECT}/${repo_uri##*/}"
474     }
475    
476 cardoe 1.47 ## -- subversion__get_peg_revision() ----------------------------------------- #
477 hattya 1.39 #
478 zlin 1.46 # param $1 - a repository URI.
479 cardoe 1.47 subversion__get_peg_revision() {
480 hattya 1.39 local repo_uri="${1}"
481    
482     debug-print "${FUNCNAME}: repo_uri = ${repo_uri}"
483    
484     # repo_uri has peg revision ?
485 zlin 1.46 if [[ ${repo_uri} != *@* ]]; then
486 hattya 1.39 debug-print "${FUNCNAME}: repo_uri does not have a peg revision."
487 hattya 1.33 fi
488 zlin 1.49
489 cardoe 1.47 local peg_rev=
490     [[ ${repo_uri} = *@* ]] && peg_rev="${repo_uri##*@}"
491 hattya 1.33
492 hattya 1.39 debug-print "${FUNCNAME}: peg_rev = ${peg_rev}"
493    
494 cardoe 1.47 echo "${peg_rev}"
495 hattya 1.33 }
496 zlin 1.50
497     # @FUNCTION: subversion_pkg_preinst
498 zlin 1.55 # @USAGE: [repo_uri]
499 zlin 1.50 # @DESCRIPTION:
500     # Log the svn revision of source code. Doing this in pkg_preinst because we
501     # want the logs to stick around if packages are uninstalled without messing with
502     # config protection.
503     subversion_pkg_preinst() {
504     local pkgdate=$(date "+%Y%m%d %H:%M:%S")
505 zlin 1.55 subversion_wc_info "${1:-${ESVN_REPO_URI}}"
506 zlin 1.50 if [[ -n ${ESCM_LOGDIR} ]]; then
507     local dir="${ROOT}/${ESCM_LOGDIR}/${CATEGORY}"
508     if [[ ! -d ${dir} ]]; then
509     mkdir -p "${dir}" || \
510     eerror "Failed to create '${dir}' for logging svn revision to '${PORTDIR_SCM}'"
511     fi
512     local logmessage="svn: ${pkgdate} - ${PF}:${SLOT} was merged at revision ${ESVN_WC_REVISION}"
513     if [[ -d ${dir} ]]; then
514     echo "${logmessage}" >> "${dir}/${PN}.log"
515     else
516     eerror "Could not log the message '${logmessage}' to '${dir}/${PN}.log'"
517     fi
518     fi
519 zlin 1.51 }

  ViewVC Help
Powered by ViewVC 1.1.20