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

Diff of /eclass/cvs.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.56 Revision 1.68
1# Copyright 1999-2004 Gentoo Foundation 1# Copyright 1999-2006 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2 2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/cvs.eclass,v 1.56 2005/07/06 20:20:03 agriffis Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/cvs.eclass,v 1.68 2006/12/11 00:16:28 vapier Exp $
4#
5# Maintainer: vapier@gentoo.org (and anyone who wants to help)
4 6
5# Current Maintainer: Tal Peer <coredumb@gentoo.org> 7inherit eutils
6# Original Author: Dan Armak <danarmak@gentoo.org>
7
8# SSH auth code by Danny <danny.milo@gmx.net>
9
10# SSH password authentication support and host key verification
11# support by Jeremy Maitin-Shepard <jbms@gentoo.org>
12
13 8
14# This eclass provides the generic cvs fetching functions. To use 9# This eclass provides the generic cvs fetching functions. To use
15# this from an ebuild, set the `ebuild-configurable settings' as 10# this from an ebuild, set the `ebuild-configurable settings' as
16# specified below in your ebuild before inheriting. Then either leave 11# specified below in your ebuild before inheriting. Then either leave
17# the default src_unpack or extend over cvs_src_unpack. If you find 12# the default src_unpack or extend over cvs_src_unpack. If you find
24 19
25# Support additional remote shells with `ext' authentication (does 20# Support additional remote shells with `ext' authentication (does
26# anyone actually need to use it with anything other than SSH?) 21# anyone actually need to use it with anything other than SSH?)
27 22
28 23
29INHERITED="$INHERITED $ECLASS"
30 24
31# Users shouldn't change these settings! The ebuild/eclass inheriting 25# Users shouldn't change these settings! The ebuild/eclass inheriting
32# this eclass will take care of that. If you want to set the global 26# this eclass will take care of that. If you want to set the global
33# KDE cvs ebuilds' settings, see the comments in kde-source.eclass. 27# KDE cvs ebuilds' settings, see the comments in kde-source.eclass.
34 28
39# You can set, for example, "cvs -t" for extensive debug information 33# You can set, for example, "cvs -t" for extensive debug information
40# on the cvs connection. The default of "cvs -q -f -z4" means to be 34# on the cvs connection. The default of "cvs -q -f -z4" means to be
41# quiet, to disregard the ~/.cvsrc config file and to use maximum 35# quiet, to disregard the ~/.cvsrc config file and to use maximum
42# compression. 36# compression.
43 37
44[ -z "$ECVS_CVS_COMMAND" ] && ECVS_CVS_COMMAND="cvs -q -f -z4" 38[[ -z ${ECVS_CVS_COMPRESS} ]] && ECVS_CVS_COMPRESS="-z1"
39[[ -z ${ECVS_CVS_OPTIONS} ]] && ECVS_CVS_OPTIONS="-q -f"
40[[ -z ${ECVS_CVS_COMMAND} ]] && ECVS_CVS_COMMAND="cvs ${ECVS_CVS_OPTIONS} ${ECVS_CVS_COMPRESS}"
45 41
46 42
47# ECVS_UP_OPTS, ECVS_CO_OPTS -- CVS options given after the cvs 43# ECVS_UP_OPTS, ECVS_CO_OPTS -- CVS options given after the cvs
48# command (update or checkout). 44# command (update or checkout).
49# 45#
70 66
71 67
72# ECVS_TOP_DIR -- The directory under which CVS modules are checked 68# ECVS_TOP_DIR -- The directory under which CVS modules are checked
73# out. 69# out.
74 70
75[ -z "$ECVS_TOP_DIR" ] && ECVS_TOP_DIR="${DISTDIR}/cvs-src" 71[ -z "$ECVS_TOP_DIR" ] && ECVS_TOP_DIR="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/cvs-src"
76 72
77# ECVS_SERVER -- CVS path 73# ECVS_SERVER -- CVS path
78# 74#
79# The format is "server:/dir", e.g. "anoncvs.kde.org:/home/kde". 75# The format is "server:/dir", e.g. "anoncvs.kde.org:/home/kde".
80# Remove the other parts of the full CVSROOT, which might look like 76# Remove the other parts of the full CVSROOT, which might look like
119[ -z "$ECVS_AUTH" ] && ECVS_AUTH="pserver" 115[ -z "$ECVS_AUTH" ] && ECVS_AUTH="pserver"
120 116
121# ECVS_USER -- Username to use for authentication on the remote server 117# ECVS_USER -- Username to use for authentication on the remote server
122[ -z "$ECVS_USER" ] && ECVS_USER="anonymous" 118[ -z "$ECVS_USER" ] && ECVS_USER="anonymous"
123 119
124
125# ECVS_PASS -- Password to use for authentication on the remote server 120# ECVS_PASS -- Password to use for authentication on the remote server
126[ -z "$ECVS_PASS" ] && ECVS_PASS="" 121[ -z "$ECVS_PASS" ] && ECVS_PASS=""
127 122
128 123
129# ECVS_SSH_HOST_KEY 124# ECVS_SSH_HOST_KEY
156# --- end ebuild-configurable settings --- 151# --- end ebuild-configurable settings ---
157 152
158# add cvs to deps 153# add cvs to deps
159# ssh is used for ext auth 154# ssh is used for ext auth
160# sudo is used to run as a specified user 155# sudo is used to run as a specified user
161DEPEND="$DEPEND dev-util/cvs app-admin/sudo" 156DEPEND="dev-util/cvs"
157
158[ -n "$ECVS_RUNAS" ] && DEPEND="$DEPEND app-admin/sudo"
162 159
163if [ "$ECVS_AUTH" == "ext" ]; then 160if [ "$ECVS_AUTH" == "ext" ]; then
164 #default to ssh 161 #default to ssh
165 [ -z "$CVS_RSH" ] && export SSH_RSH="ssh" 162 [ -z "$CVS_RSH" ] && export CVS_RSH="ssh"
166 if [ "$CVS_RSH" != "ssh" ]; then 163 if [ "$CVS_RSH" != "ssh" ]; then
167 die "Support for ext auth with clients other than ssh has not been implemented yet" 164 die "Support for ext auth with clients other than ssh has not been implemented yet"
168 fi 165 fi
169 DEPEND="$DEPEND net-misc/openssh" 166 DEPEND="${DEPEND} net-misc/openssh"
170fi 167fi
171 168
172# called from cvs_src_unpack 169# called from cvs_src_unpack
173cvs_fetch() { 170cvs_fetch() {
174 171
177 174
178 local ECVS_COMMAND="${ECVS_COMMAND}" 175 local ECVS_COMMAND="${ECVS_COMMAND}"
179 local ECVS_UP_OPTS="${ECVS_UP_OPTS}" 176 local ECVS_UP_OPTS="${ECVS_UP_OPTS}"
180 local ECVS_CO_OPTS="${ECVS_CO_OPTS}" 177 local ECVS_CO_OPTS="${ECVS_CO_OPTS}"
181 178
182 # Fix for sourceforge which doesnt want -z>3 anymore.
183
184 (echo $ECVS_SERVER | grep -q sourceforge) \
185 && [ "$ECVS_CVS_COMMAND" == "cvs -q -f -z4" ] \
186 && ECVS_CVS_COMMAND="cvs -q -f -z3"
187
188 debug-print-function $FUNCNAME $* 179 debug-print-function $FUNCNAME $*
189 180
190 # Update variables that are modified by ebuild parameters, which 181 # Update variables that are modified by ebuild parameters, which
191 # should be effective every time cvs_fetch is called, and not just 182 # should be effective every time cvs_fetch is called, and not just
192 # every time cvs.eclass is inherited 183 # every time cvs.eclass is inherited
193 184
194
195 # Handle parameter for local (non-recursive) fetching 185 # Handle parameter for local (non-recursive) fetching
196 186
197 if [ -n "$ECVS_LOCAL" ]; then 187 if [ -n "$ECVS_LOCAL" ]; then
198 ECVS_UP_OPTS="$ECVS_UP_OPTS -l" 188 ECVS_UP_OPTS="$ECVS_UP_OPTS -l"
199 ECVS_CO_OPTS="$ECVS_CO_OPTS -l" 189 ECVS_CO_OPTS="$ECVS_CO_OPTS -l"
200 fi 190 fi
201 191
202 # Handle ECVS_BRANCH option 192 # Handle ECVS_BRANCH option
203 # 193 #
204 # Because CVS auto-switches branches, we just have to pass the 194 # Because CVS auto-switches branches, we just have to pass the
205 # correct -rBRANCH option when updating. 195 # correct -rBRANCH option when updating.
206 196
207 if [ -n "$ECVS_BRANCH" ]; then 197 if [ -n "$ECVS_BRANCH" ]; then
208 ECVS_UP_OPTS="$ECVS_UP_OPTS -r$ECVS_BRANCH" 198 ECVS_UP_OPTS="$ECVS_UP_OPTS -r$ECVS_BRANCH"
278 # be put in Root 268 # be put in Root
279 if [ "$ECVS_AUTH" == "no" ] 269 if [ "$ECVS_AUTH" == "no" ]
280 then 270 then
281 local server="${ECVS_USER}@${ECVS_SERVER}" 271 local server="${ECVS_USER}@${ECVS_SERVER}"
282 else 272 else
273 local connection="${ECVS_AUTH}"
274 [[ -n ${ECVS_PROXY} ]] && connection="${connection};proxy=${ECVS_PROXY}"
275 [[ -n ${ECVS_PROXY_PORT} ]] && connection="${connection};proxyport=${ECVS_PROXY_PORT}"
283 local server=":${ECVS_AUTH}:${ECVS_USER}@${ECVS_SERVER}" 276 local server=":${connection}:${ECVS_USER}@${ECVS_SERVER}"
284 fi 277 fi
285 278
286 # Switch servers automagically if needed 279 # Switch servers automagically if needed
287 if [ "$mode" == "update" ]; then 280 if [ "$mode" == "update" ]; then
288 cd /$ECVS_TOP_DIR/$ECVS_LOCALNAME 281 cd /$ECVS_TOP_DIR/$ECVS_LOCALNAME
339 eval $cmdlogin || die "cvs login command failed" 332 eval $cmdlogin || die "cvs login command failed"
340 if [ "${mode}" == "update" ]; then 333 if [ "${mode}" == "update" ]; then
341 einfo "Running $cmdupdate" 334 einfo "Running $cmdupdate"
342 eval $cmdupdate || die "cvs update command failed" 335 eval $cmdupdate || die "cvs update command failed"
343 elif [ "${mode}" == "checkout" ]; then 336 elif [ "${mode}" == "checkout" ]; then
344 einfo "Running $cmdcheckout" 337 einfo "Running $cmdcheckout"
345 eval $cmdcheckout|| die "cvs checkout command failed" 338 eval $cmdcheckout|| die "cvs checkout command failed"
346 fi 339 fi
347 elif [ "${ECVS_AUTH}" == "ext" ] || [ "${ECVS_AUTH}" == "no" ]; then 340 elif [ "${ECVS_AUTH}" == "ext" ] || [ "${ECVS_AUTH}" == "no" ]; then
348 341
349 # Hack to support SSH password authentication 342 # Hack to support SSH password authentication
414 echo "${CVS_ECLASS_STRICT_HOST_CHECKING}')" \ 407 echo "${CVS_ECLASS_STRICT_HOST_CHECKING}')" \
415 >> "${CVS_RSH}" 408 >> "${CVS_RSH}"
416 echo "os.execv('/usr/bin/ssh', newarglist)" \ 409 echo "os.execv('/usr/bin/ssh', newarglist)" \
417 >> "${CVS_RSH}" 410 >> "${CVS_RSH}"
418 411
419 chmod a+x "${CVS_RSH}" 412 chmod a+x "${CVS_RSH}"
420 413
421 # Make sure DISPLAY is set (SSH will not use SSH_ASKPASS 414 # Make sure DISPLAY is set (SSH will not use SSH_ASKPASS
422 # if DISPLAY is not set) 415 # if DISPLAY is not set)
423 416
424 [ -z "${DISPLAY}" ] && DISPLAY="DISPLAY" 417 [ -z "${DISPLAY}" ] && DISPLAY="DISPLAY"
425 export DISPLAY 418 export DISPLAY
426 419
427 # Create a dummy executable to echo $ECVS_PASS 420 # Create a dummy executable to echo $ECVS_PASS
428 421
429 export SSH_ASKPASS="${T}/cvs_sshechopass" 422 export SSH_ASKPASS="${T}/cvs_sshechopass"
430 if [ "${ECVS_AUTH}" != "no" ]; then 423 if [ "${ECVS_AUTH}" != "no" ]; then
431 echo -en "#!/bin/bash\necho \"$ECVS_PASS\"\n" \ 424 echo -en "#!/bin/bash\necho \"$ECVS_PASS\"\n" \
432 > "${SSH_ASKPASS}" 425 > "${SSH_ASKPASS}"
433 else 426 else
434 echo -en "#!/bin/bash\nreturn\n" \ 427 echo -en "#!/bin/bash\nreturn\n" \
435 > "${SSH_ASKPASS}" 428 > "${SSH_ASKPASS}"
436 429
437 fi 430 fi
438 chmod a+x "${SSH_ASKPASS}" 431 chmod a+x "${SSH_ASKPASS}"
439 fi 432 fi
440 433
441 if [ "${mode}" == "update" ]; then 434 if [ "${mode}" == "update" ]; then
442 einfo "Running $cmdupdate" 435 einfo "Running $cmdupdate"
443 eval $cmdupdate || die "cvs update command failed" 436 eval $cmdupdate || die "cvs update command failed"
444 elif [ "${mode}" == "checkout" ]; then 437 elif [ "${mode}" == "checkout" ]; then
445 einfo "Running $cmdcheckout" 438 einfo "Running $cmdcheckout"
446 eval $cmdcheckout|| die "cvs checkout command failed" 439 eval $cmdcheckout|| die "cvs checkout command failed"
447 fi 440 fi
448 441
449 # Restore environment variable values 442 # Restore environment variable values
450 export CVS_RSH="${CVS_ECLASS_ORIG_CVS_RSH}" 443 export CVS_RSH="${CVS_ECLASS_ORIG_CVS_RSH}"
451 if [ "${CVS_ECLASS_ORIG_SSH_ASKPASS+set}" == "set" ]; then 444 if [ "${CVS_ECLASS_ORIG_SSH_ASKPASS+set}" == "set" ]; then
452 export SSH_ASKPASS="${CVS_ECLASS_ORIG_SSH_ASKPASS}" 445 export SSH_ASKPASS="${CVS_ECLASS_ORIG_SSH_ASKPASS}"
453 else 446 else
490 [ -z "$ECVS_MODULE" ] && die "ERROR: CVS module not set, cannot continue." 483 [ -z "$ECVS_MODULE" ] && die "ERROR: CVS module not set, cannot continue."
491 484
492 local ECVS_LOCALNAME="${ECVS_LOCALNAME}" 485 local ECVS_LOCALNAME="${ECVS_LOCALNAME}"
493 486
494 if [ -z "$ECVS_LOCALNAME" ]; then 487 if [ -z "$ECVS_LOCALNAME" ]; then
495 ECVS_LOCALNAME="$ECVS_MODULE" 488 ECVS_LOCALNAME="$ECVS_MODULE"
496 fi 489 fi
497 490
498 if [ "$ECVS_SERVER" == "offline" ]; then 491 local sanitized_pn=$(echo "${PN}" | LC_ALL=C sed -e 's:[^A-Za-z0-9_]:_:g')
492 local offline_pkg_var="ECVS_OFFLINE_${sanitized_pn}"
493 if [ "${!offline_pkg_var}" == "1" -o "$ECVS_OFFLINE" == "1" -o "$ECVS_SERVER" == "offline" ]; then
499 # We're not required to fetch anything; the module already 494 # We're not required to fetch anything; the module already
500 # exists and shouldn't be updated. 495 # exists and shouldn't be updated.
501 if [ -d "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}" ]; then 496 if [ -d "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}" ]; then
502 debug-print "$FUNCNAME: offline mode" 497 debug-print "$FUNCNAME: offline mode"
503 else 498 else
504 debug-print "$FUNCNAME: Offline mode specified but directory ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} not found, exiting with error" 499 debug-print "$FUNCNAME: Offline mode specified but directory ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} not found, exiting with error"
505 die "ERROR: Offline mode specified, but directory ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} not found. Aborting." 500 die "ERROR: Offline mode specified, but directory ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} not found. Aborting."
506 fi 501 fi
535 # Implement some of base_src_unpack's functionality; note however 530 # Implement some of base_src_unpack's functionality; note however
536 # that base.eclass may not have been inherited! 531 # that base.eclass may not have been inherited!
537 if [ -n "$PATCHES" ]; then 532 if [ -n "$PATCHES" ]; then
538 debug-print "$FUNCNAME: PATCHES=$PATCHES, S=$S, autopatching" 533 debug-print "$FUNCNAME: PATCHES=$PATCHES, S=$S, autopatching"
539 cd "$S" 534 cd "$S"
540 for x in $PATCHES; do 535 epatch ${PATCHES}
541 debug-print "patching from $x"
542 patch -p0 < "$x"
543 done
544 # Make sure we don't try to apply patches more than once, 536 # Make sure we don't try to apply patches more than once,
545 # since cvs_src_unpack is usually called several times from 537 # since cvs_src_unpack is usually called several times from
546 # e.g. kde-source_src_unpack 538 # e.g. kde-source_src_unpack
547 export PATCHES="" 539 export PATCHES=""
548 fi 540 fi
549 541
550 einfo "CVS module ${ECVS_MODULE} is now in ${WORKDIR}" 542 einfo "CVS module ${ECVS_MODULE} is now in ${WORKDIR}"
551} 543}
552 544
553EXPORT_FUNCTIONS src_unpack 545EXPORT_FUNCTIONS src_unpack

Legend:
Removed from v.1.56  
changed lines
  Added in v.1.68

  ViewVC Help
Powered by ViewVC 1.1.20