summaryrefslogtreecommitdiffstats
path: root/gnu/usr.bin/cvs/cvsinit/cvsinit.sh
blob: 61f3a101fbe2280fa8d8d57d4336c70f4553c02a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
#! /bin/sh
:
#
# Copyright (c) 1992, Brian Berliner
#
# You may distribute under the terms of the GNU General Public License as
# specified in the README file that comes with the CVS 1.4 kit.
#
# $CVSid: @(#)cvsinit.sh 1.1 94/10/22 $
#
# This script should be run once to help you setup your site for CVS.

# this line is edited by Makefile when creating cvsinit.inst
CVSLIB="xLIBDIRx"

# Make sure that the CVSROOT variable is set
if [ "x$CVSROOT" = x ]; then
    echo "The CVSROOT environment variable is not set."
    echo ""
    echo "You should choose a location for your source repository"
    echo "that can be shared by many developers.  It also helps to"
    echo "place the source repository on a file system that has"
    echo "plenty of free space."
    echo ""
    echo "Please enter the full path for your CVSROOT source repository:"
    read CVSROOT
    remind_cvsroot=yes
else
    echo "Using $CVSROOT as the source repository."
    remind_cvsroot=no
fi
echo ""

# Now, create the $CVSROOT if it is not already there
if [ ! -d $CVSROOT ]; then
    echo "Hmmm... $CVSROOT does not exist; trying to make it..."
    path=
    for comp in `echo $CVSROOT | sed -e 's,/, ,g'`; do
	path=$path/$comp
	if [ ! -d $path ]; then
	    mkdir $path
	fi
    done
else
    echo "Good... $CVSROOT already exists."
fi

# Next, check for $CVSROOT/CVSROOT
if [ ! -d $CVSROOT/CVSROOT ]; then
    if [ -d $CVSROOT/CVSROOT.adm ]; then
	echo "You have the old $CVSROOT/CVSROOT.adm directory."
	echo "I will rename it to $CVSROOT/CVSROOT for you..."
	mv $CVSROOT/CVSROOT.adm $CVSROOT/CVSROOT
    else
	echo "Making the $CVSROOT/CVSROOT directory..."
	mkdir $CVSROOT/CVSROOT
    fi
else
    echo "Wow!... so does $CVSROOT/CVSROOT."
fi
echo ""
if [ ! -d $CVSROOT/CVSROOT ]; then
    echo "You still don't have a $CVSROOT/CVSROOT directory."
    echo "I give up."
    exit 1
fi

# Create the special *info files within $CVSROOT/CVSROOT

# Trump up a simple modules file, if one doesn't exist
if [ -f $CVSROOT/CVSROOT/modules,v ]; then
    if [ ! -f $CVSROOT/CVSROOT/modules ]; then
	echo "You have a $CVSROOT/CVSROOT/modules,v file,"
	echo "But no $CVSROOT/CVSROOT/modules file.  This is OK."
	echo "I'll checkout a fresh copy..."
	(cd $CVSROOT/CVSROOT; co -q modules)
	echo ""
    fi
else
    if [ -f $CVSROOT/CVSROOT/modules ]; then
	echo "You have a $CVSROOT/CVSROOT/modules file,"
	echo "But no $CVSROOT/CVSROOT/modules,v file."
	echo "I'll create one for you, but otherwise leave it alone..."
    else
	echo "The $CVSROOT/CVSROOT/modules file does not exist."
	echo "Making a simple one for you..."
	cat > $CVSROOT/CVSROOT/modules <<"HERE"
#
# The CVS modules file
#
# Three different line formats are valid:
#	key	-a    aliases...
#	key [options] directory
#	key [options] directory files...
#
# Where "options" are composed of:
#	-i prog		Run "prog" on "cvs commit" from top-level of module.
#	-o prog		Run "prog" on "cvs checkout" of module.
#	-t prog		Run "prog" on "cvs rtag" of module.
#	-u prog		Run "prog" on "cvs update" of module.
#	-d dir		Place module in directory "dir" instead of module name.
#	-l		Top-level directory only -- do not recurse.
#
# And "directory" is a path to a directory relative to $CVSROOT.
#
# The "-a" option specifies an alias.  An alias is interpreted as if
# everything on the right of the "-a" had been typed on the command line.
#
# You can encode a module within a module by using the special '&'
# character to interpose another module into the current module.  This
# can be useful for creating a module that consists of many directories
# spread out over the entire source repository.
#

# Convenient aliases
world		-a .

# CVSROOT support; run mkmodules whenever anything changes.
CVSROOT		-i mkmodules CVSROOT
modules		-i mkmodules CVSROOT modules
loginfo		-i mkmodules CVSROOT loginfo
commitinfo	-i mkmodules CVSROOT commitinfo
rcsinfo		-i mkmodules CVSROOT rcsinfo
editinfo	-i mkmodules CVSROOT editinfo

# Add other modules here...
HERE
    fi
    (cd $CVSROOT/CVSROOT; ci -q -u -t/dev/null -m'initial checkin of modules' modules)
    echo ""
fi

# check to see if there are any references to the old CVSROOT.adm directory
if grep CVSROOT.adm $CVSROOT/CVSROOT/modules >/dev/null 2>&1; then
    echo "Warning: your $CVSROOT/CVSROOT/modules file still"
    echo "	contains references to the old CVSROOT.adm directory"
    echo "	You should really change these to the new CVSROOT directory"
    echo ""
fi

# loginfo, like modules, is special-cased
if [ -f $CVSROOT/CVSROOT/loginfo,v ]; then
    if [ ! -f $CVSROOT/CVSROOT/loginfo ]; then
	echo "You have a $CVSROOT/CVSROOT/loginfo,v file,"
	echo "But no $CVSROOT/CVSROOT/loginfo file.  This is OK."
	echo "I'll checkout a fresh copy..."
	(cd $CVSROOT/CVSROOT; co -q loginfo)
	echo ""
    fi
else
    if [ -f $CVSROOT/CVSROOT/loginfo ]; then
	echo "You have a $CVSROOT/CVSROOT/loginfo file,"
	echo "But no $CVSROOT/CVSROOT/loginfo,v file."
	echo "I'll create one for you, but otherwise leave it alone..."
    else
	echo "The $CVSROOT/CVSROOT/loginfo file does not exist."
	echo "Making a simple one for you..."
	# try to find perl; use fancy log script if we can
	for perlpath in `echo $PATH | sed -e 's/:/ /g'` x; do
	    if [ -f $perlpath/perl ]; then
		echo "#!$perlpath/perl" > $CVSROOT/CVSROOT/log.pl
		cat $CVSLIB/contrib/log.pl >> $CVSROOT/CVSROOT/log.pl
		chmod 755 $CVSROOT/CVSROOT/log.pl
		cp $CVSLIB/examples/loginfo $CVSROOT/CVSROOT/loginfo
		break
	    fi
	done
	if [ $perlpath = x ]; then
	    # we did not find perl anywhere, so make a simple loginfo file
	    cat > $CVSROOT/CVSROOT/loginfo <<"HERE"
#
# The "loginfo" file is used to control where "cvs commit" log information
# is sent.  The first entry on a line is a regular expression which is tested
# against the directory that the change is being made to, relative to the
# $CVSROOT.  If a match is found, then the remainder of the line is a filter
# program that should expect log information on its standard input.
#
# The filter program may use one and only one % modifier (ala printf).  If
# %s is specified in the filter program, a brief title is included (enclosed
# in single quotes) showing the modified file names.
#
# If the repository name does not match any of the regular expressions in this
# file, the "DEFAULT" line is used, if it is specified.
#
# If the name ALL appears as a regular expression it is always used
# in addition to the first matching regex or DEFAULT.
#
DEFAULT		(echo ""; echo $USER; date; cat) >> $CVSROOT/CVSROOT/commitlog
HERE
	fi
    fi
    (cd $CVSROOT/CVSROOT; ci -q -u -t/dev/null -m'initial checkin of loginfo' loginfo)
    echo ""
fi

# The remaining files are generated from the examples files.
for info in commitinfo rcsinfo editinfo; do
    if [ -f $CVSROOT/CVSROOT/${info},v ]; then
	if [ ! -f $CVSROOT/CVSROOT/$info ]; then
	    echo "You have a $CVSROOT/CVSROOT/${info},v file,"
	    echo "But no $CVSROOT/CVSROOT/$info file.  This is OK."
	    echo "I'll checkout a fresh copy..."
	    (cd $CVSROOT/CVSROOT; co -q $info)
	    echo ""
	fi
    else
	if [ -f $CVSROOT/CVSROOT/$info ]; then
	    echo "You have a $CVSROOT/CVSROOT/$info file,"
	    echo "But no $CVSROOT/CVSROOT/${info},v file."
	    echo "I'll create one for you, but otherwise leave it alone..."
	else
	    echo "The $CVSROOT/CVSROOT/$info file does not exist."
	    echo "Making a simple one for you..."
	    sed -e 's/^\([^#]\)/#\1/' $CVSLIB/examples/$info > $CVSROOT/CVSROOT/$info
	fi
	(cd $CVSROOT/CVSROOT; ci -q -u -t/dev/null -m"initial checkin of $info" $info)
	echo ""
    fi
done

# XXX - also add a stub for the cvsignore file

# Turn on history logging by default
if [ ! -f $CVSROOT/CVSROOT/history ]; then
    echo "Enabling CVS history logging..."
    touch $CVSROOT/CVSROOT/history
    echo ""
fi

# finish up by running mkmodules
echo "All done!  Running 'mkmodules' as my final step..."
mkmodules $CVSROOT/CVSROOT

# and, if necessary, remind them about setting CVSROOT
if [ $remind_cvsroot = yes ]; then
    echo "Remember to set the CVSROOT environment variable in your login script"
fi

exit 0
OpenPOWER on IntegriCloud