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# cvscheck - identify files added, changed, or removed 
16#            in CVS working directory
17#
18# Contributed by Lowell Skoog <fluke!lowell@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
27name=cvscheck
28changes=0
29
30# If we can't run CVS commands in this directory
31cvs status . > /dev/null 2>&1
32if [ $? != 0 ] ; then
33
34    # Bail out
35    echo "$name: there is no version here; bailing out" 1>&2
36    exit 1
37fi
38
39# Identify files added to working directory
40for 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
73done
74
75# Identify changed files
76changedfiles=`cvs diff | egrep '^diff' | awk '{print $3}'`
77for file in $changedfiles ; do
78    echo "file changed:    $file - not CVS committed"
79    changes=`expr $changes + 1`
80done
81
82# Identify files removed from working directory
83removedfiles=`cvs status | egrep '^File:[ 	]*no file' | awk '{print $4}'`
84
85# Determine whether each file has been cvs removed
86for 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`
93done
94
95exit $changes
96