#! /bin/sh # # cvscheck - identify files added, changed, or removed # in CVS working directory # # Contributed by Lowell Skoog # # This program should be run in a working directory that has been # checked out using CVS. It identifies files that have been added, # changed, or removed in the working directory, but not "cvs # committed". It also determines whether the files have been "cvs # added" or "cvs removed". For directories, it is only practical to # determine whether they have been added. name=cvscheck changes=0 # If we can't run CVS commands in this directory cvs status . > /dev/null 2>&1 if [ $? != 0 ] ; then # Bail out echo "$name: there is no version here; bailing out" 1>&2 exit 1 fi # Identify files added to working directory for file in .* * ; do # Skip '.' and '..' if [ $file = '.' -o $file = '..' ] ; then continue fi # If a regular file if [ -f $file ] ; then if cvs status $file | grep -s '^From:[ ]*New file' ; then echo "file added: $file - not CVS committed" changes=`expr $changes + 1` elif cvs status $file | grep -s '^From:[ ]*no entry for' ; then echo "file added: $file - not CVS added, not CVS committed" changes=`expr $changes + 1` fi # Else if a directory elif [ -d $file -a $file != CVS.adm ] ; then # Move into it cd $file # If CVS commands don't work inside cvs status . > /dev/null 2>&1 if [ $? != 0 ] ; then echo "directory added: $file - not CVS added" changes=`expr $changes + 1` fi # Move back up cd .. fi done # Identify changed files changedfiles=`cvs diff | egrep '^diff' | awk '{print $3}'` for file in $changedfiles ; do echo "file changed: $file - not CVS committed" changes=`expr $changes + 1` done # Identify files removed from working directory removedfiles=`cvs status | egrep '^File:[ ]*no file' | awk '{print $4}'` # Determine whether each file has been cvs removed for file in $removedfiles ; do if cvs status $file | grep -s '^From:[ ]*-' ; then echo "file removed: $file - not CVS committed" else echo "file removed: $file - not CVS removed, not CVS committed" fi changes=`expr $changes + 1` done exit $changes