diff options
Diffstat (limited to 'bin/control_rancid.in')
-rw-r--r-- | bin/control_rancid.in | 149 |
1 files changed, 103 insertions, 46 deletions
diff --git a/bin/control_rancid.in b/bin/control_rancid.in index 705c3e1..fc8ce14 100644 --- a/bin/control_rancid.in +++ b/bin/control_rancid.in @@ -158,6 +158,7 @@ then rm -f .cvsignore cat >.cvsignore <<EOF .cvsignore +.gitignore routers.all routers.down routers.up @@ -175,6 +176,7 @@ then cp .cvsignore .gitignore fi +### FIXME: if $RCSSYS = git do we need to do anything here? if [ $RCSSYS = cvs -o $RCSSYS = svn ]; then # do cvs update of router.db in case anyone has fiddled. $RCSSYS update router.db > $TMP 2>&1 @@ -302,13 +304,25 @@ then IFS=$OFS router=$1 + message='new router' touch $router - if [ $RCSSYS = cvs ] ; then - cvs add -ko $router - elif [ $RCSSYS = svn ]; then - svn add $router - fi - $RCSSYS commit -m 'new router' $router + case $rcssys in + cvs ) + cvs add -ko $router + cvs commit -m $message $router + ;; + svn ) + svn add $router + svn commit -m $message $router + ;; + git ) + ( + flock -x 200 + git add $router + git commit -m $message + ) 200>$BASEDIR/.lockfile + ;; + esac echo "Added $router" done echo @@ -333,33 +347,56 @@ trap 'rm -fr $TMP;' 1 2 15 cd $DIR/configs # check for 'up' routers missing in RCS. no idea how this happens to some folks for router in `cut -d: -f1 ../routers.up` ; do - if [ $RCSSYS = cvs ] ; then - cvs status $router | grep -i 'status: unknown' > /dev/null 2>&1 - elif [ $RCSSYS = cvs ]; then - svn status $router | grep '^?' > /dev/null 2>&1 - else - true - fi - if [ $? -eq 0 ]; then - touch $router - if [ $RCSSYS = cvs ] ; then - cvs add -ko $router - else - svn add $router - fi - echo "$RCSSYS added missing router $router" - fi + case $RCSSYS in + cvs ) + cvs status $router | grep -i 'status: unknown' > /dev/null 2>&1 + if [ $? -eq 0 ]; then + touch $router + cvs add -ko $router + echo "$RCSSYS added missing router $router" + fi + ;; + svn ) + svn status $router | grep '^?' > /dev/null 2>&1 + if [ $? -eq 0 ]; then + touch $router + svn add $router + echo "$RCSSYS added missing router $router" + fi + ;; + git ) + git ls-files $router > /dev/null 2>&1 + if [ $? -eq 1 ]; then + touch $router + ( + flock -x 200 + git add $router + git commit -m "added missing router $router" + ) 200>$BASEDIR/.lockfile + echo "$RCSSYS added missing router $router" + fi + ;; + esac done echo # delete configs from RCS for routers not listed in routers.up. -for router in `find . \( -name \*.new -prune -o -name CVS -prune -o -name .svn -prune \) -o -type f -print | sed -e 's/^.\///'` ; do +for router in `find . \( -name \*.new -prune -o -name CVS -prune -o -name .svn -prune -o -name .git -prune \) -o -type f -print | sed -e 's/^.\///'` ; do grep -i "^$router:" ../router.db > /dev/null 2>&1 if [ $? -eq 1 ]; then rm -f $router - if [ $RCSSYS = cvs -o $RCSSYS = svn ]; then - $RCSSYS delete $router - fi - $RCSSYS commit -m 'deleted router' $router + case $RCSSYS in + cvs | svn ) + $RCSSYS delete $router + $RCSSYS commit -m "deleted router $router" $router + ;; + git ) + ( + flock -x 200 + git rm $router + git commit -m "deleted router $router" + ) 200>$BASEDIR/.lockfile + ;; + esac echo "Deleted $router" fi done @@ -369,7 +406,19 @@ cd $DIR if [ ! -s routers.up ] then # commit router.db - $RCSSYS commit -m updates router.db + message="updates" + case $RCSSYS in + cvs | svn ) + $RCSSYS commit -m $message router.db + ;; + git ) + ( + flock -x 200 + git add router.db + git commit -m $message + ) 200>$BASEDIR/.lockfile + ;; + esac exit; fi @@ -457,14 +506,18 @@ done # Diff the directory and then checkin. trap 'rm -fr $TMP $TMP.diff $DIR/routers.single;' 1 2 15 cd $DIR -if [ $RCSSYS = "cvs" ] ; then - cvs -f @DIFF_CMD@ -ko | sed -e '/^RCS file: /d' -e '/^--- /d' \ - -e '/^+++ /d' -e 's/^\([-+ ]\)/\1 /' >$TMP.diff -elif [ $RCSSYS = "svn" ]; then - svn diff | sed -e '/^+++ /d' -e 's/^\([-+ ]\)/\1 /' >$TMP.diff -else - git diff $GROUP/configs | sed -e '/^diff /d' -e '/^index /'d -e '/^+++ /d' -e 's/^\([-+ ]\)/\1 /' >$TMP.diff -fi +case $RCSSYS in + cvs ) + cvs -f @DIFF_CMD@ -ko | sed -e '/^RCS file: /d' -e '/^--- /d' \ + -e '/^+++ /d' -e 's/^\([-+ ]\)/\1 /' >$TMP.diff + ;; + svn ) + svn diff | sed -e '/^+++ /d' -e 's/^\([-+ ]\)/\1 /' >$TMP.diff + ;; + git ) + git diff $GROUP/configs | sed -e '/^diff /d' -e '/^index /'d -e '/^+++ /d' -e 's/^\([-+ ]\)/\1 /' >$TMP.diff + ;; +esac if [ $alt_mailrcpt -eq 1 ] ; then subject="router config diffs - courtesy of $mailrcpt" @@ -472,20 +525,24 @@ else subject="router config diffs" fi if [ "X$device" != "X" ] ; then - if [ $RCSSYS = cvs -o $RCSSYS = svn ]; then - $RCSSYS commit -m "updates - courtesy of $mailrcpt" - else - git commit -m "updates - courtesy of $mailrcpt" $GROUP/configs - fi + message="updates - courtesy of $mailrcpt" subject="$GROUP/$device $subject" else - if [ $RCSSYS = cvs -o $RCSSYS = svn ]; then - $RCSSYS commit -m "updates" - else - git commit -m "updates" $GROUP/configs - fi + message="updates" subject="$GROUP $subject" fi +case $RCSSYS in + cvs | svn ) + $RCSSYS commit -m $message + ;; + git ) + ( + flock -x 200 + git add $GROUP/configs + git commit -m $message + ) 200>$BASEDIR/.lockfile + ;; +esac # Mail out the diffs (if there are any). if [ -s $TMP.diff ] |