Home | History | Annotate | Line # | Download | only in contrib
      1 #! /bin/sh
      2 #
      3 #  Copyright (C) 1995-2005 The Free Software Foundation, Inc.
      4 #
      5 #  This program is free software; you can redistribute it and/or modify
      6 #  it under the terms of the GNU General Public License as published by
      7 #  the Free Software Foundation; either version 2, or (at your option)
      8 #  any later version.
      9 #
     10 #  This program is distributed in the hope that it will be useful,
     11 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
     12 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13 #  GNU General Public License for more details.
     14 #
     15 # sandbox_status - identify files added, changed, or removed 
     16 #                  in CVS working directory
     17 #
     18 # Contributed by Lowell Skoog <fluke!lowell (at] uunet.uu.net>
     19 # 
     20 # This program should be run in a working directory that has been
     21 # checked out using CVS.  It identifies files that have been added,
     22 # changed, or removed in the working directory, but not "cvs
     23 # committed".  It also determines whether the files have been "cvs
     24 # added" or "cvs removed".  For directories, it is only practical to
     25 # determine whether they have been added.
     26 
     27 name=sandbox_status
     28 changes=0
     29 
     30 # If we can't run CVS commands in this directory
     31 cvs status . > /dev/null 2>&1
     32 if [ $? != 0 ] ; then
     33 
     34     # Bail out
     35     echo "$name: there is no version here; bailing out" 1>&2
     36     exit 1
     37 fi
     38 
     39 # Identify files added to working directory
     40 for file in .* * ; do
     41 
     42     # Skip '.' and '..'
     43     if [ $file = '.' -o $file = '..' ] ; then
     44 	continue
     45     fi
     46 
     47     # If a regular file
     48     if [ -f $file ] ; then
     49 	if cvs status $file | grep -s '^From:[ 	]*New file' ; then
     50 	    echo "file added:      $file - not CVS committed"
     51 	    changes=`expr $changes + 1`
     52 	elif cvs status $file | grep -s '^From:[ 	]*no entry for' ; then
     53 	    echo "file added:      $file - not CVS added, not CVS committed"
     54 	    changes=`expr $changes + 1`
     55 	fi
     56 
     57     # Else if a directory
     58     elif [ -d $file -a $file != CVS.adm ] ; then
     59 
     60 	# Move into it
     61 	cd $file
     62 
     63 	# If CVS commands don't work inside
     64 	cvs status . > /dev/null 2>&1
     65 	if [ $? != 0 ] ; then
     66 	    echo "directory added: $file - not CVS added"
     67 	    changes=`expr $changes + 1`
     68 	fi
     69 
     70 	# Move back up
     71 	cd ..
     72     fi
     73 done
     74 
     75 # Identify changed files
     76 changedfiles=`cvs diff | egrep '^diff' | awk '{print $3}'`
     77 for file in $changedfiles ; do
     78     echo "file changed:    $file - not CVS committed"
     79     changes=`expr $changes + 1`
     80 done
     81 
     82 # Identify files removed from working directory
     83 removedfiles=`cvs status | egrep '^File:[ 	]*no file' | awk '{print $4}'`
     84 
     85 # Determine whether each file has been cvs removed
     86 for file in $removedfiles ; do
     87     if cvs status $file | grep -s '^From:[ 	]*-' ; then
     88 	echo "file removed:    $file - not CVS committed"
     89     else
     90 	echo "file removed:    $file - not CVS removed, not CVS committed"
     91     fi
     92     changes=`expr $changes + 1`
     93 done
     94 
     95 exit $changes
     96