117721Speter#! /bin/sh
217721Speter#
3175261Sobrien# Copyright (C) 1995-2005 The Free Software Foundation, Inc.
4175261Sobrien#
5175261Sobrien# This program is free software; you can redistribute it and/or modify
6175261Sobrien# it under the terms of the GNU General Public License as published by
7175261Sobrien# the Free Software Foundation; either version 2, or (at your option)
8175261Sobrien# any later version.
9175261Sobrien#
10175261Sobrien# This program is distributed in the hope that it will be useful,
11175261Sobrien# but WITHOUT ANY WARRANTY; without even the implied warranty of
12175261Sobrien# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13175261Sobrien# GNU General Public License for more details.
14175261Sobrien#
1517721Speter# cvscheck - identify files added, changed, or removed 
1617721Speter#            in CVS working directory
1717721Speter#
1817721Speter# Contributed by Lowell Skoog <fluke!lowell@uunet.uu.net>
1917721Speter# 
2017721Speter# This program should be run in a working directory that has been
2117721Speter# checked out using CVS.  It identifies files that have been added,
2217721Speter# changed, or removed in the working directory, but not "cvs
2317721Speter# committed".  It also determines whether the files have been "cvs
2417721Speter# added" or "cvs removed".  For directories, it is only practical to
2517721Speter# determine whether they have been added.
2617721Speter
2717721Spetername=cvscheck
2817721Speterchanges=0
2917721Speter
3017721Speter# If we can't run CVS commands in this directory
3117721Spetercvs status . > /dev/null 2>&1
3217721Speterif [ $? != 0 ] ; then
3317721Speter
3417721Speter    # Bail out
3517721Speter    echo "$name: there is no version here; bailing out" 1>&2
3617721Speter    exit 1
3717721Speterfi
3817721Speter
3917721Speter# Identify files added to working directory
4017721Speterfor file in .* * ; do
4117721Speter
4217721Speter    # Skip '.' and '..'
4317721Speter    if [ $file = '.' -o $file = '..' ] ; then
4417721Speter	continue
4517721Speter    fi
4617721Speter
4717721Speter    # If a regular file
4817721Speter    if [ -f $file ] ; then
4917721Speter	if cvs status $file | grep -s '^From:[ 	]*New file' ; then
5017721Speter	    echo "file added:      $file - not CVS committed"
5117721Speter	    changes=`expr $changes + 1`
5217721Speter	elif cvs status $file | grep -s '^From:[ 	]*no entry for' ; then
5317721Speter	    echo "file added:      $file - not CVS added, not CVS committed"
5417721Speter	    changes=`expr $changes + 1`
5517721Speter	fi
5617721Speter
5717721Speter    # Else if a directory
5817721Speter    elif [ -d $file -a $file != CVS.adm ] ; then
5917721Speter
6017721Speter	# Move into it
6117721Speter	cd $file
6217721Speter
6317721Speter	# If CVS commands don't work inside
6417721Speter	cvs status . > /dev/null 2>&1
6517721Speter	if [ $? != 0 ] ; then
6617721Speter	    echo "directory added: $file - not CVS added"
6717721Speter	    changes=`expr $changes + 1`
6817721Speter	fi
6917721Speter
7017721Speter	# Move back up
7117721Speter	cd ..
7217721Speter    fi
7317721Speterdone
7417721Speter
7517721Speter# Identify changed files
7617721Speterchangedfiles=`cvs diff | egrep '^diff' | awk '{print $3}'`
7717721Speterfor file in $changedfiles ; do
7817721Speter    echo "file changed:    $file - not CVS committed"
7917721Speter    changes=`expr $changes + 1`
8017721Speterdone
8117721Speter
8217721Speter# Identify files removed from working directory
8317721Speterremovedfiles=`cvs status | egrep '^File:[ 	]*no file' | awk '{print $4}'`
8417721Speter
8517721Speter# Determine whether each file has been cvs removed
8617721Speterfor file in $removedfiles ; do
8717721Speter    if cvs status $file | grep -s '^From:[ 	]*-' ; then
8817721Speter	echo "file removed:    $file - not CVS committed"
8917721Speter    else
9017721Speter	echo "file removed:    $file - not CVS removed, not CVS committed"
9117721Speter    fi
9217721Speter    changes=`expr $changes + 1`
9317721Speterdone
9417721Speter
9517721Speterexit $changes
96