: # # 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.3 kit. # # @(#)cvsinit 1.1 92/03/31 # # This script should be run once to help you setup your site for CVS. # 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 contrib/log.pl >> $CVSROOT/CVSROOT/log.pl chmod 755 $CVSROOT/CVSROOT/log.pl cp 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/' examples/$info > $CVSROOT/CVSROOT/$info fi (cd $CVSROOT/CVSROOT; ci -q -u -t/dev/null -m"initial checkin of $info" $info) echo "" fi done # 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