84 lines
2.2 KiB
Bash
84 lines
2.2 KiB
Bash
#! /bin/sh
|
|
#
|
|
# cvscheck - identify files added, changed, or removed
|
|
# in CVS working directory
|
|
#
|
|
# Contributed by Lowell Skoog <fluke!lowell@uunet.uu.net>
|
|
#
|
|
# 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
|