1 | # Copyright 1999-2004 Gentoo Foundation |
1 | # Copyright 1999-2004 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.53 2004/10/19 19:51:12 vapier Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/cvs.eclass,v 1.61 2005/09/21 23:22:56 vapier Exp $ |
4 | |
4 | |
5 | # Current Maintainer: Tal Peer <coredumb@gentoo.org> |
5 | inherit 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 | |
6 | |
14 | # This eclass provides the generic cvs fetching functions. To use |
7 | # This eclass provides the generic cvs fetching functions. To use |
15 | # this from an ebuild, set the `ebuild-configurable settings' as |
8 | # this from an ebuild, set the `ebuild-configurable settings' as |
16 | # specified below in your ebuild before inheriting. Then either leave |
9 | # specified below in your ebuild before inheriting. Then either leave |
17 | # the default src_unpack or extend over cvs_src_unpack. If you find |
10 | # the default src_unpack or extend over cvs_src_unpack. If you find |
… | |
… | |
24 | |
17 | |
25 | # Support additional remote shells with `ext' authentication (does |
18 | # Support additional remote shells with `ext' authentication (does |
26 | # anyone actually need to use it with anything other than SSH?) |
19 | # anyone actually need to use it with anything other than SSH?) |
27 | |
20 | |
28 | |
21 | |
29 | ECLASS=cvs |
|
|
30 | INHERITED="$INHERITED $ECLASS" |
|
|
31 | |
22 | |
32 | # Users shouldn't change these settings! The ebuild/eclass inheriting |
23 | # Users shouldn't change these settings! The ebuild/eclass inheriting |
33 | # this eclass will take care of that. If you want to set the global |
24 | # this eclass will take care of that. If you want to set the global |
34 | # KDE cvs ebuilds' settings, see the comments in kde-source.eclass. |
25 | # KDE cvs ebuilds' settings, see the comments in kde-source.eclass. |
35 | |
26 | |
… | |
… | |
73 | # ECVS_TOP_DIR -- The directory under which CVS modules are checked |
64 | # ECVS_TOP_DIR -- The directory under which CVS modules are checked |
74 | # out. |
65 | # out. |
75 | |
66 | |
76 | [ -z "$ECVS_TOP_DIR" ] && ECVS_TOP_DIR="${DISTDIR}/cvs-src" |
67 | [ -z "$ECVS_TOP_DIR" ] && ECVS_TOP_DIR="${DISTDIR}/cvs-src" |
77 | |
68 | |
78 | # ECVS_NAME -- CVS path |
69 | # ECVS_SERVER -- CVS path |
79 | # |
70 | # |
80 | # The format is "server:/dir", e.g. "anoncvs.kde.org:/home/kde". |
71 | # The format is "server:/dir", e.g. "anoncvs.kde.org:/home/kde". |
81 | # Remove the other parts of the full CVSROOT, which might look like |
72 | # Remove the other parts of the full CVSROOT, which might look like |
82 | # ":pserver:anonymous@anoncvs.kde.org:/home/kde"; this is generated |
73 | # ":pserver:anonymous@anoncvs.kde.org:/home/kde"; this is generated |
83 | # using other settings also. |
74 | # using other settings also. |
… | |
… | |
157 | # --- end ebuild-configurable settings --- |
148 | # --- end ebuild-configurable settings --- |
158 | |
149 | |
159 | # add cvs to deps |
150 | # add cvs to deps |
160 | # ssh is used for ext auth |
151 | # ssh is used for ext auth |
161 | # sudo is used to run as a specified user |
152 | # sudo is used to run as a specified user |
162 | DEPEND="$DEPEND dev-util/cvs app-admin/sudo" |
153 | DEPEND="dev-util/cvs" |
|
|
154 | |
|
|
155 | [ -n "$ECVS_RUNAS" ] && DEPEND="$DEPEND app-admin/sudo" |
163 | |
156 | |
164 | if [ "$ECVS_AUTH" == "ext" ]; then |
157 | if [ "$ECVS_AUTH" == "ext" ]; then |
165 | #default to ssh |
158 | #default to ssh |
166 | [ -z "$CVS_RSH" ] && export SSH_RSH="ssh" |
159 | [ -z "$CVS_RSH" ] && export CVS_RSH="ssh" |
167 | if [ "$CVS_RSH" != "ssh" ]; then |
160 | if [ "$CVS_RSH" != "ssh" ]; then |
168 | die "Support for ext auth with clients other than ssh has not been implemented yet" |
161 | die "Support for ext auth with clients other than ssh has not been implemented yet" |
169 | fi |
162 | fi |
170 | DEPEND="$DEPEND net-misc/openssh" |
163 | DEPEND="${DEPEND} net-misc/openssh" |
171 | fi |
164 | fi |
172 | |
165 | |
173 | # called from cvs_src_unpack |
166 | # called from cvs_src_unpack |
174 | cvs_fetch() { |
167 | cvs_fetch() { |
175 | |
168 | |
… | |
… | |
190 | |
183 | |
191 | # Update variables that are modified by ebuild parameters, which |
184 | # Update variables that are modified by ebuild parameters, which |
192 | # should be effective every time cvs_fetch is called, and not just |
185 | # should be effective every time cvs_fetch is called, and not just |
193 | # every time cvs.eclass is inherited |
186 | # every time cvs.eclass is inherited |
194 | |
187 | |
195 | |
|
|
196 | # Handle parameter for local (non-recursive) fetching |
188 | # Handle parameter for local (non-recursive) fetching |
197 | |
189 | |
198 | if [ -n "$ECVS_LOCAL" ]; then |
190 | if [ -n "$ECVS_LOCAL" ]; then |
199 | ECVS_UP_OPTS="$ECVS_UP_OPTS -l" |
191 | ECVS_UP_OPTS="$ECVS_UP_OPTS -l" |
200 | ECVS_CO_OPTS="$ECVS_CO_OPTS -l" |
192 | ECVS_CO_OPTS="$ECVS_CO_OPTS -l" |
201 | fi |
193 | fi |
202 | |
194 | |
203 | # Handle ECVS_BRANCH option |
195 | # Handle ECVS_BRANCH option |
204 | # |
196 | # |
205 | # Because CVS auto-switches branches, we just have to pass the |
197 | # Because CVS auto-switches branches, we just have to pass the |
206 | # correct -rBRANCH option when updating. |
198 | # correct -rBRANCH option when updating. |
207 | |
199 | |
208 | if [ -n "$ECVS_BRANCH" ]; then |
200 | if [ -n "$ECVS_BRANCH" ]; then |
209 | ECVS_UP_OPTS="$ECVS_UP_OPTS -r$ECVS_BRANCH" |
201 | ECVS_UP_OPTS="$ECVS_UP_OPTS -r$ECVS_BRANCH" |
… | |
… | |
340 | eval $cmdlogin || die "cvs login command failed" |
332 | eval $cmdlogin || die "cvs login command failed" |
341 | if [ "${mode}" == "update" ]; then |
333 | if [ "${mode}" == "update" ]; then |
342 | einfo "Running $cmdupdate" |
334 | einfo "Running $cmdupdate" |
343 | eval $cmdupdate || die "cvs update command failed" |
335 | eval $cmdupdate || die "cvs update command failed" |
344 | elif [ "${mode}" == "checkout" ]; then |
336 | elif [ "${mode}" == "checkout" ]; then |
345 | einfo "Running $cmdcheckout" |
337 | einfo "Running $cmdcheckout" |
346 | eval $cmdcheckout|| die "cvs checkout command failed" |
338 | eval $cmdcheckout|| die "cvs checkout command failed" |
347 | fi |
339 | fi |
348 | elif [ "${ECVS_AUTH}" == "ext" ]; then |
340 | elif [ "${ECVS_AUTH}" == "ext" ] || [ "${ECVS_AUTH}" == "no" ]; then |
349 | |
341 | |
350 | # Hack to support SSH password authentication |
342 | # Hack to support SSH password authentication |
351 | |
343 | |
352 | # Backup environment variable values |
344 | # Backup environment variable values |
353 | local CVS_ECLASS_ORIG_CVS_RSH="${CVS_RSH}" |
345 | local CVS_ECLASS_ORIG_CVS_RSH="${CVS_RSH}" |
… | |
… | |
385 | except: |
377 | except: |
386 | pass |
378 | pass |
387 | newarglist = sys.argv[:] |
379 | newarglist = sys.argv[:] |
388 | EOF |
380 | EOF |
389 | |
381 | |
|
|
382 | # disable X11 forwarding which causes .xauth access violations |
|
|
383 | # - 20041205 Armando Di Cianno <fafhrd@gentoo.org> |
|
|
384 | echo "newarglist.insert(1, '-oClearAllForwardings=yes')" \ |
|
|
385 | >> "${CVS_RSH}" |
|
|
386 | echo "newarglist.insert(1, '-oForwardX11=no')" \ |
|
|
387 | >> "${CVS_RSH}" |
|
|
388 | |
390 | # Handle SSH host key checking |
389 | # Handle SSH host key checking |
391 | |
390 | |
392 | local CVS_ECLASS_KNOWN_HOSTS="${T}/cvs_ssh_known_hosts" |
391 | local CVS_ECLASS_KNOWN_HOSTS="${T}/cvs_ssh_known_hosts" |
393 | echo "newarglist.insert(1, '-oUserKnownHostsFile=${CVS_ECLASS_KNOWN_HOSTS}')" \ |
392 | echo "newarglist.insert(1, '-oUserKnownHostsFile=${CVS_ECLASS_KNOWN_HOSTS}')" \ |
394 | >> "${CVS_RSH}" |
393 | >> "${CVS_RSH}" |
… | |
… | |
396 | if [ -z "${ECVS_SSH_HOST_KEY}" ]; then |
395 | if [ -z "${ECVS_SSH_HOST_KEY}" ]; then |
397 | ewarn "Warning: The SSH host key of the remote server will not be verified." |
396 | ewarn "Warning: The SSH host key of the remote server will not be verified." |
398 | einfo "A temporary known hosts list will be used." |
397 | einfo "A temporary known hosts list will be used." |
399 | local CVS_ECLASS_STRICT_HOST_CHECKING="no" |
398 | local CVS_ECLASS_STRICT_HOST_CHECKING="no" |
400 | touch "${CVS_ECLASS_KNOWN_HOSTS}" |
399 | touch "${CVS_ECLASS_KNOWN_HOSTS}" |
401 | echo "newarglist.insert(1, '-oStrictHostKeyChecking=no')" \ |
|
|
402 | >> "${CVS_RSH}" |
|
|
403 | else |
400 | else |
404 | local CVS_ECLASS_STRICT_HOST_CHECKING="yes" |
401 | local CVS_ECLASS_STRICT_HOST_CHECKING="yes" |
405 | echo "${ECVS_SSH_HOST_KEY}" > "${CVS_ECLASS_KNOWN_HOSTS}" |
402 | echo "${ECVS_SSH_HOST_KEY}" > "${CVS_ECLASS_KNOWN_HOSTS}" |
406 | fi |
403 | fi |
407 | |
404 | |
… | |
… | |
410 | echo "${CVS_ECLASS_STRICT_HOST_CHECKING}')" \ |
407 | echo "${CVS_ECLASS_STRICT_HOST_CHECKING}')" \ |
411 | >> "${CVS_RSH}" |
408 | >> "${CVS_RSH}" |
412 | echo "os.execv('/usr/bin/ssh', newarglist)" \ |
409 | echo "os.execv('/usr/bin/ssh', newarglist)" \ |
413 | >> "${CVS_RSH}" |
410 | >> "${CVS_RSH}" |
414 | |
411 | |
415 | chmod a+x "${CVS_RSH}" |
412 | chmod a+x "${CVS_RSH}" |
416 | |
413 | |
417 | # Make sure DISPLAY is set (SSH will not use SSH_ASKPASS |
414 | # Make sure DISPLAY is set (SSH will not use SSH_ASKPASS |
418 | # if DISPLAY is not set) |
415 | # if DISPLAY is not set) |
419 | |
416 | |
420 | [ -z "${DISPLAY}" ] && DISPLAY="DISPLAY" |
417 | [ -z "${DISPLAY}" ] && DISPLAY="DISPLAY" |
421 | export DISPLAY |
418 | export DISPLAY |
422 | |
419 | |
423 | # Create a dummy executable to echo $ECVS_PASS |
420 | # Create a dummy executable to echo $ECVS_PASS |
424 | |
421 | |
425 | export SSH_ASKPASS="${T}/cvs_sshechopass" |
422 | export SSH_ASKPASS="${T}/cvs_sshechopass" |
426 | |
423 | if [ "${ECVS_AUTH}" != "no" ]; then |
427 | echo -en "#!/bin/bash\necho \"$ECVS_PASS\"\n" \ |
424 | echo -en "#!/bin/bash\necho \"$ECVS_PASS\"\n" \ |
428 | > "${SSH_ASKPASS}" |
425 | > "${SSH_ASKPASS}" |
|
|
426 | else |
|
|
427 | echo -en "#!/bin/bash\nreturn\n" \ |
|
|
428 | > "${SSH_ASKPASS}" |
429 | |
429 | |
|
|
430 | fi |
430 | chmod a+x "${SSH_ASKPASS}" |
431 | chmod a+x "${SSH_ASKPASS}" |
431 | fi |
432 | fi |
432 | |
433 | |
433 | if [ "${mode}" == "update" ]; then |
434 | if [ "${mode}" == "update" ]; then |
434 | einfo "Running $cmdupdate" |
435 | einfo "Running $cmdupdate" |
435 | eval $cmdupdate || die "cvs update command failed" |
436 | eval $cmdupdate || die "cvs update command failed" |
436 | elif [ "${mode}" == "checkout" ]; then |
437 | elif [ "${mode}" == "checkout" ]; then |
437 | einfo "Running $cmdcheckout" |
438 | einfo "Running $cmdcheckout" |
438 | eval $cmdcheckout|| die "cvs checkout command failed" |
439 | eval $cmdcheckout|| die "cvs checkout command failed" |
439 | fi |
440 | fi |
440 | |
441 | |
441 | # Restore environment variable values |
442 | # Restore environment variable values |
442 | export CVS_RSH="${CVS_ECLASS_ORIG_CVS_RSH}" |
443 | export CVS_RSH="${CVS_ECLASS_ORIG_CVS_RSH}" |
443 | if [ "${CVS_ECLASS_ORIG_SSH_ASKPASS+set}" == "set" ]; then |
444 | if [ "${CVS_ECLASS_ORIG_SSH_ASKPASS+set}" == "set" ]; then |
444 | export SSH_ASKPASS="${CVS_ECLASS_ORIG_SSH_ASKPASS}" |
445 | export SSH_ASKPASS="${CVS_ECLASS_ORIG_SSH_ASKPASS}" |
445 | else |
446 | else |
… | |
… | |
448 | |
449 | |
449 | if [ "${CVS_ECLASS_ORIG_DISPLAY+set}" == "set" ]; then |
450 | if [ "${CVS_ECLASS_ORIG_DISPLAY+set}" == "set" ]; then |
450 | export DISPLAY="${CVS_ECLASS_ORIG_DISPLAY}" |
451 | export DISPLAY="${CVS_ECLASS_ORIG_DISPLAY}" |
451 | else |
452 | else |
452 | unset DISPLAY |
453 | unset DISPLAY |
453 | fi |
|
|
454 | elif [ "${ECVS_AUTH}" == "no" ]; then |
|
|
455 | if [ "${mode}" == "update" ]; then |
|
|
456 | einfo "Running $cmdupdate" |
|
|
457 | eval $cmdupdate || die "cvs update command failed" |
|
|
458 | elif [ "${mode}" == "checkout" ]; then |
|
|
459 | einfo "Running $cmdcheckout" |
|
|
460 | eval $cmdcheckout|| die "cvs checkout command failed" |
|
|
461 | fi |
454 | fi |
462 | fi |
455 | fi |
463 | |
456 | |
464 | # Restore ownership. Not sure why this is needed, but someone |
457 | # Restore ownership. Not sure why this is needed, but someone |
465 | # added it in the orig ECVS_RUNAS stuff. |
458 | # added it in the orig ECVS_RUNAS stuff. |
… | |
… | |
535 | # Implement some of base_src_unpack's functionality; note however |
528 | # Implement some of base_src_unpack's functionality; note however |
536 | # that base.eclass may not have been inherited! |
529 | # that base.eclass may not have been inherited! |
537 | if [ -n "$PATCHES" ]; then |
530 | if [ -n "$PATCHES" ]; then |
538 | debug-print "$FUNCNAME: PATCHES=$PATCHES, S=$S, autopatching" |
531 | debug-print "$FUNCNAME: PATCHES=$PATCHES, S=$S, autopatching" |
539 | cd "$S" |
532 | cd "$S" |
540 | for x in $PATCHES; do |
533 | 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, |
534 | # Make sure we don't try to apply patches more than once, |
545 | # since cvs_src_unpack is usually called several times from |
535 | # since cvs_src_unpack is usually called several times from |
546 | # e.g. kde-source_src_unpack |
536 | # e.g. kde-source_src_unpack |
547 | export PATCHES="" |
537 | export PATCHES="" |
548 | fi |
538 | fi |
549 | |
539 | |
550 | einfo "CVS module ${ECVS_MODULE} is now in ${WORKDIR}" |
540 | einfo "CVS module ${ECVS_MODULE} is now in ${WORKDIR}" |
551 | } |
541 | } |
552 | |
542 | |
553 | EXPORT_FUNCTIONS src_unpack |
543 | EXPORT_FUNCTIONS src_unpack |