#! /bin/sh ## ## $Id$ ## ## @PACKAGE@ @VERSION@ ## Copyright (c) 1997-2007 by Terrapin Communications, Inc. ## All rights reserved. ## ## This code is derived from software contributed to and maintained by ## Terrapin Communications, Inc. by Henry Kilmer, John Heasley, Andrew Partan, ## Pete Whiting, Austin Schutz, and Andrew Fort. ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## 2. Redistributions in binary form must reproduce the above copyright ## notice, this list of conditions and the following disclaimer in the ## documentation and/or other materials provided with the distribution. ## 3. All advertising materials mentioning features or use of this software ## must display the following acknowledgement: ## This product includes software developed by Terrapin Communications, ## Inc. and its contributors for RANCID. ## 4. Neither the name of Terrapin Communications, Inc. nor the names of its ## contributors may be used to endorse or promote products derived from ## this software without specific prior written permission. ## 5. It is requested that non-binding fixes and modifications be contributed ## back to Terrapin Communications, Inc. ## ## THIS SOFTWARE IS PROVIDED BY Terrapin Communications, INC. AND CONTRIBUTORS ## ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ## TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COMPANY OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ## CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF ## SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS ## INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN ## CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ## ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ## POSSIBILITY OF SUCH DAMAGE. # # Create all of the misc files & dirs needed for each group and import them # into CVS or Subversion. # # rancid-cvs # # Read in the environment ENVFILE="@sysconfdir@/rancid.conf" # print a usage message to stderr pr_usage() { echo "usage: $0 [-V] [group [group ...]]" >&2; } # command-line options # -V print version string if [ $# -ge 1 ] ; then while [ 1 ] ; do case $1 in -V) echo "@PACKAGE@ @VERSION@" exit 0 ;; -*) echo "unknown option: $1" >&2 pr_usage exit 1 ;; *) break; ;; esac done fi . $ENVFILE # Base dir if [ ! -d $BASEDIR ]; then mkdir -p $BASEDIR || (echo "Could not create local state directory: $BASEDIR"; exit 1) fi cd $BASEDIR # RCS system RCSSYS=${RCSSYS:=cvs}; case $RCSSYS in cvs | svn ) # we're good ;; git ) # force $CVSROOT CVSROOT=$BASEDIR/.git ;; * ) echo "$RCSSYS is not a valid value for RCSSYS." exit 1 ;; esac # Top level CVS stuff if [ ! -d $CVSROOT ]; then case $RCSSYS in cvs ) cvs -d $CVSROOT init ;; svn ) svnadmin create $CVSROOT @SVN_FSTYPE@ ;; git ) # git does not use $CVSROOT, instead configs are stored in $BASEDIR ( flock -x 200 git init rm -f .gitignore echo "/logs" >> .gitignore echo "/.lockfile" >> .gitignore echo "*~" >> .gitignore echo ".#*" >> .gitignore echo ".cvsignore" >> .gitignore echo "*.new" >> .gitignore git add .gitignore git commit -m "Initializing repository." ) 200>$BASEDIR/.lockfile esac fi # Log dir if [ ! -d logs ]; then mkdir logs fi # Which groups to do if [ $# -ge 1 ] ; then LIST_OF_GROUPS="$*"; export LIST_OF_GROUPS elif [ "$LIST_OF_GROUPS" = "" ] ; then echo "LIST_OF_GROUPS is empty in $ENVFILE" exit 1 fi for GROUP in `echo $LIST_OF_GROUPS` ; do DIR=$BASEDIR/$GROUP # Directory for the group and the configs if [ ! -d $DIR ]; then mkdir -p $DIR cd $DIR case $RCSSYS in cvs ) cvs import -m "$GROUP" $GROUP new rancid cd $BASEDIR cvs checkout $GROUP ;; svn ) svn import -m "$GROUP" . file://$CVSROOT/$GROUP cd $BASEDIR svn checkout file://$CVSROOT/$GROUP $GROUP ;; git ) cd $BASEDIR echo "$GROUP/routers.all" >> .gitignore echo "$GROUP/routers.down" >> .gitignore echo "$GROUP/routers.up" >> .gitignore echo "$GROUP/routers.mail" >> .gitignore echo "$GROUP/routers.added" >> .gitignore echo "$GROUP/routers.deleted" >> .gitignore echo "$GROUP/routers.single" >> .gitignore echo "$GROUP/routers.up.missed" >> .gitignore echo "$GROUP/routers.failed" >> .gitignore ( flock -x 200 git add .gitignore git commit -m "Update .gitignore" ) 200>$BASEDIR/.lockfile ;; esac fi cd $DIR if [ ! -d configs ]; then mkdir configs case $RCSSYS in cvs | svn ) $RCSSYS add configs $RCSSYS commit -m 'new' configs ;; git ) # nothing to be done here ;; esac fi # main files if [ ! -f routers.all ]; then touch routers.all fi if [ ! -f routers.down ]; then touch routers.down fi if [ ! -f routers.up ]; then touch routers.up fi if [ ! -f router.db ]; then touch router.db case $RCSSYS in cvs | svn ) $RCSSYS add router.db $RCSSYS commit -m 'new' router.db ;; git ) ( flock -x 200 git add router.db git commit -m "Initializing $GROUP" ) 200>$BASEDIR/.lockfile ;; esac fi done