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