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