/[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.65
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.65 2006/10/14 20:27:21 swegener 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
70 64
71 65
72# ECVS_TOP_DIR -- The directory under which CVS modules are checked 66# ECVS_TOP_DIR -- The directory under which CVS modules are checked
73# out. 67# out.
74 68
75[ -z "$ECVS_TOP_DIR" ] && ECVS_TOP_DIR="${DISTDIR}/cvs-src" 69[ -z "$ECVS_TOP_DIR" ] && ECVS_TOP_DIR="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/cvs-src"
76 70
77# ECVS_SERVER -- CVS path 71# ECVS_SERVER -- CVS path
78# 72#
79# The format is "server:/dir", e.g. "anoncvs.kde.org:/home/kde". 73# 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 74# Remove the other parts of the full CVSROOT, which might look like
156# --- end ebuild-configurable settings --- 150# --- end ebuild-configurable settings ---
157 151
158# add cvs to deps 152# add cvs to deps
159# ssh is used for ext auth 153# ssh is used for ext auth
160# sudo is used to run as a specified user 154# sudo is used to run as a specified user
161DEPEND="$DEPEND dev-util/cvs app-admin/sudo" 155DEPEND="dev-util/cvs"
156
157[ -n "$ECVS_RUNAS" ] && DEPEND="$DEPEND app-admin/sudo"
162 158
163if [ "$ECVS_AUTH" == "ext" ]; then 159if [ "$ECVS_AUTH" == "ext" ]; then
164 #default to ssh 160 #default to ssh
165 [ -z "$CVS_RSH" ] && export SSH_RSH="ssh" 161 [ -z "$CVS_RSH" ] && export CVS_RSH="ssh"
166 if [ "$CVS_RSH" != "ssh" ]; then 162 if [ "$CVS_RSH" != "ssh" ]; then
167 die "Support for ext auth with clients other than ssh has not been implemented yet" 163 die "Support for ext auth with clients other than ssh has not been implemented yet"
168 fi 164 fi
169 DEPEND="$DEPEND net-misc/openssh" 165 DEPEND="${DEPEND} net-misc/openssh"
170fi 166fi
171 167
172# called from cvs_src_unpack 168# called from cvs_src_unpack
173cvs_fetch() { 169cvs_fetch() {
174 170
189 185
190 # Update variables that are modified by ebuild parameters, which 186 # Update variables that are modified by ebuild parameters, which
191 # should be effective every time cvs_fetch is called, and not just 187 # should be effective every time cvs_fetch is called, and not just
192 # every time cvs.eclass is inherited 188 # every time cvs.eclass is inherited
193 189
194
195 # Handle parameter for local (non-recursive) fetching 190 # Handle parameter for local (non-recursive) fetching
196 191
197 if [ -n "$ECVS_LOCAL" ]; then 192 if [ -n "$ECVS_LOCAL" ]; then
198 ECVS_UP_OPTS="$ECVS_UP_OPTS -l" 193 ECVS_UP_OPTS="$ECVS_UP_OPTS -l"
199 ECVS_CO_OPTS="$ECVS_CO_OPTS -l" 194 ECVS_CO_OPTS="$ECVS_CO_OPTS -l"
200 fi 195 fi
201 196
202 # Handle ECVS_BRANCH option 197 # Handle ECVS_BRANCH option
203 # 198 #
204 # Because CVS auto-switches branches, we just have to pass the 199 # Because CVS auto-switches branches, we just have to pass the
205 # correct -rBRANCH option when updating. 200 # correct -rBRANCH option when updating.
206 201
207 if [ -n "$ECVS_BRANCH" ]; then 202 if [ -n "$ECVS_BRANCH" ]; then
208 ECVS_UP_OPTS="$ECVS_UP_OPTS -r$ECVS_BRANCH" 203 ECVS_UP_OPTS="$ECVS_UP_OPTS -r$ECVS_BRANCH"
339 eval $cmdlogin || die "cvs login command failed" 334 eval $cmdlogin || die "cvs login command failed"
340 if [ "${mode}" == "update" ]; then 335 if [ "${mode}" == "update" ]; then
341 einfo "Running $cmdupdate" 336 einfo "Running $cmdupdate"
342 eval $cmdupdate || die "cvs update command failed" 337 eval $cmdupdate || die "cvs update command failed"
343 elif [ "${mode}" == "checkout" ]; then 338 elif [ "${mode}" == "checkout" ]; then
344 einfo "Running $cmdcheckout" 339 einfo "Running $cmdcheckout"
345 eval $cmdcheckout|| die "cvs checkout command failed" 340 eval $cmdcheckout|| die "cvs checkout command failed"
346 fi 341 fi
347 elif [ "${ECVS_AUTH}" == "ext" ] || [ "${ECVS_AUTH}" == "no" ]; then 342 elif [ "${ECVS_AUTH}" == "ext" ] || [ "${ECVS_AUTH}" == "no" ]; then
348 343
349 # Hack to support SSH password authentication 344 # Hack to support SSH password authentication
414 echo "${CVS_ECLASS_STRICT_HOST_CHECKING}')" \ 409 echo "${CVS_ECLASS_STRICT_HOST_CHECKING}')" \
415 >> "${CVS_RSH}" 410 >> "${CVS_RSH}"
416 echo "os.execv('/usr/bin/ssh', newarglist)" \ 411 echo "os.execv('/usr/bin/ssh', newarglist)" \
417 >> "${CVS_RSH}" 412 >> "${CVS_RSH}"
418 413
419 chmod a+x "${CVS_RSH}" 414 chmod a+x "${CVS_RSH}"
420 415
421 # Make sure DISPLAY is set (SSH will not use SSH_ASKPASS 416 # Make sure DISPLAY is set (SSH will not use SSH_ASKPASS
422 # if DISPLAY is not set) 417 # if DISPLAY is not set)
423 418
424 [ -z "${DISPLAY}" ] && DISPLAY="DISPLAY" 419 [ -z "${DISPLAY}" ] && DISPLAY="DISPLAY"
425 export DISPLAY 420 export DISPLAY
426 421
427 # Create a dummy executable to echo $ECVS_PASS 422 # Create a dummy executable to echo $ECVS_PASS
428 423
429 export SSH_ASKPASS="${T}/cvs_sshechopass" 424 export SSH_ASKPASS="${T}/cvs_sshechopass"
430 if [ "${ECVS_AUTH}" != "no" ]; then 425 if [ "${ECVS_AUTH}" != "no" ]; then
431 echo -en "#!/bin/bash\necho \"$ECVS_PASS\"\n" \ 426 echo -en "#!/bin/bash\necho \"$ECVS_PASS\"\n" \
432 > "${SSH_ASKPASS}" 427 > "${SSH_ASKPASS}"
433 else 428 else
434 echo -en "#!/bin/bash\nreturn\n" \ 429 echo -en "#!/bin/bash\nreturn\n" \
435 > "${SSH_ASKPASS}" 430 > "${SSH_ASKPASS}"
436 431
437 fi 432 fi
438 chmod a+x "${SSH_ASKPASS}" 433 chmod a+x "${SSH_ASKPASS}"
439 fi 434 fi
440 435
441 if [ "${mode}" == "update" ]; then 436 if [ "${mode}" == "update" ]; then
442 einfo "Running $cmdupdate" 437 einfo "Running $cmdupdate"
443 eval $cmdupdate || die "cvs update command failed" 438 eval $cmdupdate || die "cvs update command failed"
444 elif [ "${mode}" == "checkout" ]; then 439 elif [ "${mode}" == "checkout" ]; then
445 einfo "Running $cmdcheckout" 440 einfo "Running $cmdcheckout"
446 eval $cmdcheckout|| die "cvs checkout command failed" 441 eval $cmdcheckout|| die "cvs checkout command failed"
447 fi 442 fi
448 443
449 # Restore environment variable values 444 # Restore environment variable values
450 export CVS_RSH="${CVS_ECLASS_ORIG_CVS_RSH}" 445 export CVS_RSH="${CVS_ECLASS_ORIG_CVS_RSH}"
451 if [ "${CVS_ECLASS_ORIG_SSH_ASKPASS+set}" == "set" ]; then 446 if [ "${CVS_ECLASS_ORIG_SSH_ASKPASS+set}" == "set" ]; then
452 export SSH_ASKPASS="${CVS_ECLASS_ORIG_SSH_ASKPASS}" 447 export SSH_ASKPASS="${CVS_ECLASS_ORIG_SSH_ASKPASS}"
453 else 448 else
490 [ -z "$ECVS_MODULE" ] && die "ERROR: CVS module not set, cannot continue." 485 [ -z "$ECVS_MODULE" ] && die "ERROR: CVS module not set, cannot continue."
491 486
492 local ECVS_LOCALNAME="${ECVS_LOCALNAME}" 487 local ECVS_LOCALNAME="${ECVS_LOCALNAME}"
493 488
494 if [ -z "$ECVS_LOCALNAME" ]; then 489 if [ -z "$ECVS_LOCALNAME" ]; then
495 ECVS_LOCALNAME="$ECVS_MODULE" 490 ECVS_LOCALNAME="$ECVS_MODULE"
496 fi 491 fi
497 492
498 if [ "$ECVS_SERVER" == "offline" ]; then 493 local offline_pkg_var="ECVS_OFFLINE_${PN}"
494 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 495 # We're not required to fetch anything; the module already
500 # exists and shouldn't be updated. 496 # exists and shouldn't be updated.
501 if [ -d "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}" ]; then 497 if [ -d "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}" ]; then
502 debug-print "$FUNCNAME: offline mode" 498 debug-print "$FUNCNAME: offline mode"
503 else 499 else
504 debug-print "$FUNCNAME: Offline mode specified but directory ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} not found, exiting with error" 500 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." 501 die "ERROR: Offline mode specified, but directory ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} not found. Aborting."
506 fi 502 fi
535 # Implement some of base_src_unpack's functionality; note however 531 # Implement some of base_src_unpack's functionality; note however
536 # that base.eclass may not have been inherited! 532 # that base.eclass may not have been inherited!
537 if [ -n "$PATCHES" ]; then 533 if [ -n "$PATCHES" ]; then
538 debug-print "$FUNCNAME: PATCHES=$PATCHES, S=$S, autopatching" 534 debug-print "$FUNCNAME: PATCHES=$PATCHES, S=$S, autopatching"
539 cd "$S" 535 cd "$S"
540 for x in $PATCHES; do 536 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, 537 # Make sure we don't try to apply patches more than once,
545 # since cvs_src_unpack is usually called several times from 538 # since cvs_src_unpack is usually called several times from
546 # e.g. kde-source_src_unpack 539 # e.g. kde-source_src_unpack
547 export PATCHES="" 540 export PATCHES=""
548 fi 541 fi
549 542
550 einfo "CVS module ${ECVS_MODULE} is now in ${WORKDIR}" 543 einfo "CVS module ${ECVS_MODULE} is now in ${WORKDIR}"
551} 544}
552 545
553EXPORT_FUNCTIONS src_unpack 546EXPORT_FUNCTIONS src_unpack

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

  ViewVC Help
Powered by ViewVC 1.1.20