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

Diff of /eclass/cvs.eclass

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

Revision 1.59 Revision 1.77
1# Copyright 1999-2004 Gentoo Foundation 1# Copyright 1999-2012 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.59 2005/08/13 08:10:53 phreak Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/cvs.eclass,v 1.77 2012/09/09 07:03:28 ulm Exp $
4 4
5# Current Maintainer: Tal Peer <coredumb@gentoo.org> 5# @ECLASS: cvs.eclass
6# Original Author: Dan Armak <danarmak@gentoo.org> 6# @MAINTAINER:
7 7# vapier@gentoo.org (and anyone who wants to help)
8# SSH auth code by Danny <danny.milo@gmx.net> 8# @BLURB: This eclass provides generic cvs fetching functions
9 9# @DESCRIPTION:
10# SSH password authentication support and host key verification
11# support by Jeremy Maitin-Shepard <jbms@gentoo.org>
12
13
14# This eclass provides the generic cvs fetching functions. To use 10# This eclass provides the generic cvs fetching functions. To use this from an
15# this from an ebuild, set the `ebuild-configurable settings' as 11# ebuild, set the ECLASS VARIABLES as specified below in your ebuild before
16# specified below in your ebuild before inheriting. Then either leave 12# inheriting. Then either leave the default src_unpack or extend over
17# the default src_unpack or extend over cvs_src_unpack. If you find 13# cvs_src_unpack. If you find that you need to call the cvs_* functions
18# that you need to call the cvs_* functions directly, I'd be
19# interested to hear about it. 14# directly, I'd be interested to hear about it.
15
16inherit eutils
20 17
21# TODO: 18# TODO:
22 19
23# Implement more auth types (gserver?, kserver?) 20# Implement more auth types (gserver?, kserver?)
24 21
25# Support additional remote shells with `ext' authentication (does 22# Support additional remote shells with `ext' authentication (does
26# anyone actually need to use it with anything other than SSH?) 23# anyone actually need to use it with anything other than SSH?)
27
28 24
29 25
30# Users shouldn't change these settings! The ebuild/eclass inheriting 26# Users shouldn't change these settings! The ebuild/eclass inheriting
31# this eclass will take care of that. If you want to set the global 27# this eclass will take care of that. If you want to set the global
32# KDE cvs ebuilds' settings, see the comments in kde-source.eclass. 28# KDE cvs ebuilds' settings, see the comments in kde-source.eclass.
33 29
34# --- begin ebuild-configurable settings 30# @ECLASS-VARIABLE: ECVS_CVS_COMPRESS
31# @DESCRIPTION:
32# Set the default compression level. Has no effect when ECVS_CVS_COMMAND
33# is defined by ebuild/user.
34: ${ECVS_CVS_COMPRESS:=-z1}
35 35
36# ECVS_CVS_COMMAND -- CVS command to run 36# @ECLASS-VARIABLE: ECVS_CVS_OPTIONS
37# @DESCRIPTION:
38# Additional options to the cvs commands. Has no effect when ECVS_CVS_COMMAND
39# is defined by ebuild/user.
40: ${ECVS_CVS_OPTIONS:=-q -f}
41
42# @ECLASS-VARIABLE: ECVS_CVS_COMMAND
43# @DESCRIPTION:
44# CVS command to run
37# 45#
38# You can set, for example, "cvs -t" for extensive debug information 46# You can set, for example, "cvs -t" for extensive debug information
39# on the cvs connection. The default of "cvs -q -f -z4" means to be 47# on the cvs connection. The default of "cvs -q -f -z4" means to be
40# quiet, to disregard the ~/.cvsrc config file and to use maximum 48# quiet, to disregard the ~/.cvsrc config file and to use maximum
41# compression. 49# compression.
50: ${ECVS_CVS_COMMAND:=cvs ${ECVS_CVS_OPTIONS} ${ECVS_CVS_COMPRESS}}
42 51
43[ -z "$ECVS_CVS_COMMAND" ] && ECVS_CVS_COMMAND="cvs -q -f -z4" 52# @ECLASS-VARIABLE: ECVS_UP_OPTS
53# @DESCRIPTION:
54# CVS options given after the cvs update command. Don't remove "-dP" or things
55# won't work.
56: ${ECVS_UP_OPTS:=-dP}
44 57
58# @ECLASS-VARIABLE: ECVS_CO_OPTS
59# @DEFAULT_UNSET
60# @DESCRIPTION:
61# CVS options given after the cvs checkout command.
45 62
46# ECVS_UP_OPTS, ECVS_CO_OPTS -- CVS options given after the cvs 63# @ECLASS-VARIABLE: ECVS_OFFLINE
47# command (update or checkout). 64# @DESCRIPTION:
48# 65# Set this variable to a non-empty value to disable the automatic updating of
49# Don't remove -dP from update or things won't work. 66# a CVS source tree. This is intended to be set outside the cvs source
67# tree by users.
68: ${ECVS_OFFLINE:=${EVCS_OFFLINE}}
50 69
51[ -z "$ECVS_UP_OPTS" ] && ECVS_UP_OPTS="-dP" 70# @ECLASS-VARIABLE: ECVS_LOCAL
52[ -z "$ECVS_CO_OPTS" ] && ECVS_CO_OPTS="" 71# @DEFAULT_UNSET
53 72# @DESCRIPTION:
54
55# ECVS_LOCAL -- If this is set, the CVS module will be fetched 73# If this is set, the CVS module will be fetched non-recursively.
56# non-recursively. Refer to the information in the CVS man page 74# Refer to the information in the CVS man page regarding the -l
57# regarding the -l command option (not the -l global option). 75# command option (not the -l global option).
58 76
59 77# @ECLASS-VARIABLE: ECVS_LOCALNAME
78# @DEFAULT_UNSET
79# @DESCRIPTION:
60# ECVS_LOCALNAME -- local name of checkout directory 80# Local name of checkout directory
61# 81#
62# This is useful if the module on the server is called something 82# This is useful if the module on the server is called something
63# common like 'driver' or is nested deep in a tree, and you don't like 83# common like 'driver' or is nested deep in a tree, and you don't like
64# useless empty directories. 84# useless empty directories.
65# 85#
66# WARNING: Set this only from within ebuilds! If set in your shell or 86# WARNING: Set this only from within ebuilds! If set in your shell or
67# some such, things will break because the ebuild won't expect it and 87# some such, things will break because the ebuild won't expect it and
68# have e.g. a wrong $S setting. 88# have e.g. a wrong $S setting.
69 89
70 90# @ECLASS-VARIABLE: ECVS_TOP_DIR
91# @DESCRIPTION:
71# ECVS_TOP_DIR -- The directory under which CVS modules are checked 92# The directory under which CVS modules are checked out.
72# out.
73
74[ -z "$ECVS_TOP_DIR" ] && ECVS_TOP_DIR="${DISTDIR}/cvs-src" 93[ -z "$ECVS_TOP_DIR" ] && ECVS_TOP_DIR="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/cvs-src"
75 94
76# ECVS_SERVER -- CVS path 95# @ECLASS-VARIABLE: ECVS_SERVER
96# @DESCRIPTION:
97# CVS path
77# 98#
78# The format is "server:/dir", e.g. "anoncvs.kde.org:/home/kde". 99# The format is "server:/dir", e.g. "anoncvs.kde.org:/home/kde".
79# Remove the other parts of the full CVSROOT, which might look like 100# Remove the other parts of the full CVSROOT, which might look like
80# ":pserver:anonymous@anoncvs.kde.org:/home/kde"; this is generated 101# ":pserver:anonymous@anoncvs.kde.org:/home/kde"; this is generated
81# using other settings also. 102# using other settings also.
82# 103#
83# Set this to "offline" to disable fetching (i.e. to assume the module 104# Set this to "offline" to disable fetching (i.e. to assume the module
84# is already checked out in ECVS_TOP_DIR). 105# is already checked out in ECVS_TOP_DIR).
85
86[ -z "$ECVS_SERVER" ] && ECVS_SERVER="offline" 106[ -z "$ECVS_SERVER" ] && ECVS_SERVER="offline"
87 107
88 108# @ECLASS-VARIABLE: ECVS_MODULE
109# @REQUIRED
110# @DESCRIPTION:
89# ECVS_MODULE -- the name of the CVS module to be fetched 111# The name of the CVS module to be fetched
90# 112#
91# This must be set when cvs_src_unpack is called. This can include 113# This must be set when cvs_src_unpack is called. This can include
92# several directory levels, i.e. "foo/bar/baz" 114# several directory levels, i.e. "foo/bar/baz"
93 115
94#[ -z "$ECVS_MODULE" ] && die "$ECLASS: error: ECVS_MODULE not set, cannot continue" 116#[ -z "$ECVS_MODULE" ] && die "$ECLASS: error: ECVS_MODULE not set, cannot continue"
95 117
96 118# @ECLASS-VARIABLE: ECVS_BRANCH
119# @DEFAULT_UNSET
120# @DESCRIPTION:
97# ECVS_BRANCH -- the name of the branch/tag to use 121# The name of the branch/tag to use
98 122#
99# The default is "HEAD". The following default _will_ reset your 123# The default is "HEAD". The following default _will_ reset your
100# branch checkout to head if used. 124# branch checkout to head if used.
101 125
102#[ -z "$ECVS_BRANCH" ] && ECVS_BRANCH="HEAD" 126#[ -z "$ECVS_BRANCH" ] && ECVS_BRANCH="HEAD"
103 127
104 128# @ECLASS-VARIABLE: ECVS_AUTH
129# @DESCRIPTION:
105# ECVS_AUTH -- authentication method to use 130# Authentication method to use
106# 131#
107# Possible values are "pserver" and "ext". If `ext' authentication is 132# Possible values are "pserver" and "ext". If `ext' authentication is
108# used, the remote shell to use can be specified in CVS_RSH (SSH is 133# used, the remote shell to use can be specified in CVS_RSH (SSH is
109# used by default). Currently, the only supported remote shell for 134# used by default). Currently, the only supported remote shell for
110# `ext' authentication is SSH. 135# `ext' authentication is SSH.
115# e.g. 140# e.g.
116# "cvs -danoncvs@savannah.gnu.org:/cvsroot/backbone co System" 141# "cvs -danoncvs@savannah.gnu.org:/cvsroot/backbone co System"
117# ( from gnustep-apps/textedit ) 142# ( from gnustep-apps/textedit )
118[ -z "$ECVS_AUTH" ] && ECVS_AUTH="pserver" 143[ -z "$ECVS_AUTH" ] && ECVS_AUTH="pserver"
119 144
145# @ECLASS-VARIABLE: ECVS_USER
146# @DESCRIPTION:
120# ECVS_USER -- Username to use for authentication on the remote server 147# Username to use for authentication on the remote server.
121[ -z "$ECVS_USER" ] && ECVS_USER="anonymous" 148[ -z "$ECVS_USER" ] && ECVS_USER="anonymous"
122 149
123 150# @ECLASS-VARIABLE: ECVS_PASS
151# @DESCRIPTION:
124# ECVS_PASS -- Password to use for authentication on the remote server 152# Password to use for authentication on the remote server
125[ -z "$ECVS_PASS" ] && ECVS_PASS="" 153[ -z "$ECVS_PASS" ] && ECVS_PASS=""
126 154
127 155# @ECLASS-VARIABLE: ECVS_SSH_HOST_KEY
128# ECVS_SSH_HOST_KEY 156# @DEFAULT_UNSET
129# 157# @DESCRIPTION:
130# If SSH is used for `ext' authentication, use this variable to 158# If SSH is used for `ext' authentication, use this variable to
131# specify the host key of the remote server. The format of the value 159# specify the host key of the remote server. The format of the value
132# should be the same format that is used for the SSH known hosts file. 160# should be the same format that is used for the SSH known hosts file.
133# 161#
134# WARNING: If a SSH host key is not specified using this variable, the 162# WARNING: If a SSH host key is not specified using this variable, the
135# remote host key will not be verified. 163# remote host key will not be verified.
136 164
137 165# @ECLASS-VARIABLE: ECVS_CLEAN
166# @DEFAULT_UNSET
167# @DESCRIPTION:
138# ECVS_CLEAN -- Set this to get a clean copy when updating (passes the 168# Set this to get a clean copy when updating (passes the
139# -C option to cvs update) 169# -C option to cvs update)
140 170
141 171# @ECLASS-VARIABLE: ECVS_RUNAS
142# ECVS_RUNAS 172# @DEFAULT_UNSET
143# 173# @DESCRIPTION:
144# Specifies an alternate (non-root) user to use to run cvs. Currently 174# Specifies an alternate (non-root) user to use to run cvs. Currently
145# b0rked and wouldn't work with portage userpriv anyway without 175# b0rked and wouldn't work with portage userpriv anyway without
146# special magic. 176# special magic.
147 177
148# [ -z "$ECVS_RUNAS" ] && ECVS_RUNAS="`whoami`" 178# [ -z "$ECVS_RUNAS" ] && ECVS_RUNAS="`whoami`"
149 179
150
151# ECVS_SUBDIR -- deprecated, do not use 180# ECVS_SUBDIR -- deprecated, do not use
152[ -n "$ECVS_SUBDIR" ] && die "ERROR: deprecated ECVS_SUBDIR defined. Please fix this ebuild." 181[ -n "$ECVS_SUBDIR" ] && die "ERROR: deprecated ECVS_SUBDIR defined. Please fix this ebuild."
153
154
155# --- end ebuild-configurable settings ---
156 182
157# add cvs to deps 183# add cvs to deps
158# ssh is used for ext auth 184# ssh is used for ext auth
159# sudo is used to run as a specified user 185# sudo is used to run as a specified user
160DEPEND="dev-util/cvs app-admin/sudo" 186DEPEND="dev-vcs/cvs"
187
188[ -n "$ECVS_RUNAS" ] && DEPEND="$DEPEND app-admin/sudo"
161 189
162if [ "$ECVS_AUTH" == "ext" ]; then 190if [ "$ECVS_AUTH" == "ext" ]; then
163 #default to ssh 191 #default to ssh
164 [ -z "$CVS_RSH" ] && export CVS_RSH="ssh" 192 [ -z "$CVS_RSH" ] && export CVS_RSH="ssh"
165 if [ "$CVS_RSH" != "ssh" ]; then 193 if [ "$CVS_RSH" != "ssh" ]; then
175 # not affected by modifications in this function. 203 # not affected by modifications in this function.
176 204
177 local ECVS_COMMAND="${ECVS_COMMAND}" 205 local ECVS_COMMAND="${ECVS_COMMAND}"
178 local ECVS_UP_OPTS="${ECVS_UP_OPTS}" 206 local ECVS_UP_OPTS="${ECVS_UP_OPTS}"
179 local ECVS_CO_OPTS="${ECVS_CO_OPTS}" 207 local ECVS_CO_OPTS="${ECVS_CO_OPTS}"
180
181 # Fix for sourceforge which doesnt want -z>3 anymore.
182
183 (echo $ECVS_SERVER | grep -q sourceforge) \
184 && [ "$ECVS_CVS_COMMAND" == "cvs -q -f -z4" ] \
185 && ECVS_CVS_COMMAND="cvs -q -f -z3"
186 208
187 debug-print-function $FUNCNAME $* 209 debug-print-function $FUNCNAME $*
188 210
189 # Update variables that are modified by ebuild parameters, which 211 # Update variables that are modified by ebuild parameters, which
190 # should be effective every time cvs_fetch is called, and not just 212 # should be effective every time cvs_fetch is called, and not just
276 # be put in Root 298 # be put in Root
277 if [ "$ECVS_AUTH" == "no" ] 299 if [ "$ECVS_AUTH" == "no" ]
278 then 300 then
279 local server="${ECVS_USER}@${ECVS_SERVER}" 301 local server="${ECVS_USER}@${ECVS_SERVER}"
280 else 302 else
303 local connection="${ECVS_AUTH}"
304 [[ -n ${ECVS_PROXY} ]] && connection="${connection};proxy=${ECVS_PROXY}"
305 [[ -n ${ECVS_PROXY_PORT} ]] && connection="${connection};proxyport=${ECVS_PROXY_PORT}"
281 local server=":${ECVS_AUTH}:${ECVS_USER}@${ECVS_SERVER}" 306 local server=":${connection}:${ECVS_USER}@${ECVS_SERVER}"
282 fi 307 fi
283 308
284 # Switch servers automagically if needed 309 # Switch servers automagically if needed
285 if [ "$mode" == "update" ]; then 310 if [ "$mode" == "update" ]; then
286 cd /$ECVS_TOP_DIR/$ECVS_LOCALNAME 311 cd /$ECVS_TOP_DIR/$ECVS_LOCALNAME
465 chown `whoami` "${T}/cvspass" 490 chown `whoami` "${T}/cvspass"
466 fi 491 fi
467 492
468} 493}
469 494
470 495# @FUNCTION: cvs_src_unpack
496# @DESCRIPTION:
497# The cvs src_unpack function, which will be exported
471cvs_src_unpack() { 498cvs_src_unpack() {
472 499
473 debug-print-function $FUNCNAME $* 500 debug-print-function $FUNCNAME $*
474 501
475 debug-print "$FUNCNAME: init: 502 debug-print "$FUNCNAME: init:
488 [ -z "$ECVS_MODULE" ] && die "ERROR: CVS module not set, cannot continue." 515 [ -z "$ECVS_MODULE" ] && die "ERROR: CVS module not set, cannot continue."
489 516
490 local ECVS_LOCALNAME="${ECVS_LOCALNAME}" 517 local ECVS_LOCALNAME="${ECVS_LOCALNAME}"
491 518
492 if [ -z "$ECVS_LOCALNAME" ]; then 519 if [ -z "$ECVS_LOCALNAME" ]; then
493 ECVS_LOCALNAME="$ECVS_MODULE" 520 ECVS_LOCALNAME="$ECVS_MODULE"
494 fi 521 fi
495 522
496 if [ "$ECVS_SERVER" == "offline" ]; then 523 local sanitized_pn=$(echo "${PN}" | LC_ALL=C sed -e 's:[^A-Za-z0-9_]:_:g')
524 local offline_pkg_var="ECVS_OFFLINE_${sanitized_pn}"
525 if [[ -n ${!offline_pkg_var}${ECVS_OFFLINE} ]] || [[ "$ECVS_SERVER" == "offline" ]] ; then
497 # We're not required to fetch anything; the module already 526 # We're not required to fetch anything; the module already
498 # exists and shouldn't be updated. 527 # exists and shouldn't be updated.
499 if [ -d "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}" ]; then 528 if [ -d "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}" ]; then
500 debug-print "$FUNCNAME: offline mode" 529 debug-print "$FUNCNAME: offline mode"
501 else 530 else
502 debug-print "$FUNCNAME: Offline mode specified but directory ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} not found, exiting with error" 531 debug-print "$FUNCNAME: Offline mode specified but directory ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} not found, exiting with error"
503 die "ERROR: Offline mode specified, but directory ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} not found. Aborting." 532 die "ERROR: Offline mode specified, but directory ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} not found. Aborting."
504 fi 533 fi
518 if [ -n "$ECVS_LOCAL" ]; then 547 if [ -n "$ECVS_LOCAL" ]; then
519 cp -f "$ECVS_TOP_DIR/$ECVS_LOCALNAME"/* "$WORKDIR/$ECVS_LOCALNAME" 548 cp -f "$ECVS_TOP_DIR/$ECVS_LOCALNAME"/* "$WORKDIR/$ECVS_LOCALNAME"
520 else 549 else
521 cp -Rf "$ECVS_TOP_DIR/$ECVS_LOCALNAME" "$WORKDIR/$ECVS_LOCALNAME/.." 550 cp -Rf "$ECVS_TOP_DIR/$ECVS_LOCALNAME" "$WORKDIR/$ECVS_LOCALNAME/.."
522 fi 551 fi
552
553 # Not exactly perfect, but should be pretty close #333773
554 export ECVS_VERSION=$(find "$ECVS_TOP_DIR/$ECVS_LOCALNAME/" -ipath '*/CVS/Entries' -exec cat {} + | LC_ALL=C sort | sha1sum | awk '{print $1}')
523 555
524 # If the directory is empty, remove it; empty directories cannot 556 # If the directory is empty, remove it; empty directories cannot
525 # exist in cvs. This happens when, for example, kde-source 557 # exist in cvs. This happens when, for example, kde-source
526 # requests module/doc/subdir which doesn't exist. Still create 558 # requests module/doc/subdir which doesn't exist. Still create
527 # the empty directory in workdir though. 559 # the empty directory in workdir though.
533 # Implement some of base_src_unpack's functionality; note however 565 # Implement some of base_src_unpack's functionality; note however
534 # that base.eclass may not have been inherited! 566 # that base.eclass may not have been inherited!
535 if [ -n "$PATCHES" ]; then 567 if [ -n "$PATCHES" ]; then
536 debug-print "$FUNCNAME: PATCHES=$PATCHES, S=$S, autopatching" 568 debug-print "$FUNCNAME: PATCHES=$PATCHES, S=$S, autopatching"
537 cd "$S" 569 cd "$S"
538 for x in $PATCHES; do 570 epatch ${PATCHES}
539 debug-print "patching from $x"
540 patch -p0 < "$x"
541 done
542 # Make sure we don't try to apply patches more than once, 571 # Make sure we don't try to apply patches more than once,
543 # since cvs_src_unpack is usually called several times from 572 # since cvs_src_unpack is usually called several times from
544 # e.g. kde-source_src_unpack 573 # e.g. kde-source_src_unpack
545 export PATCHES="" 574 export PATCHES=""
546 fi 575 fi

Legend:
Removed from v.1.59  
changed lines
  Added in v.1.77

  ViewVC Help
Powered by ViewVC 1.1.20