slist

Замечание: оболочка Korn /bin/ksh устанавливается инсталляцией pdksh*.rpm с компакт-диска дистрибутива Linux

Сохраните этот файл как текст и выполните для него "chmod a+rx".

Заметьте, что есть другая Unix-команда с именем slist (список доступных серверов Netware), следует удостовериться, что CVS-скрипт slist встречается раньше другого в Вашей переменной окружения PATH.

#!/bin/ksh

# CVS-программа slist
# Программа перечисления всех отредактированных файлов исходного кода из CVS

# Имя каждого файла составляется из 3 частей -- домашнего каталога,
# подкаталога и имени файла. Полный путь -- $HOME/$subdir/$fname
# В CVS сохраняется такая же структура каталогов (с помощью переменной
# $subdir), поэтому в CVS мы будем иметь $CVSROOT/$subdir/$fname
# В данной программе эти 4 переменные $HOME, $CVSROOT, $subdir и $fname
# играют важную роль. Примеры их значений:
# HOME=/home/aldev, subdir=myproject/src CVSROOT=/home/cvsroot 
# и fname=foo.cpp

# Предупреждение: заключите значения переменных, содержащих пробелы
# в двойные кавычки: "$HOME/$subdir", если subdir равен "some foo.cpp"

# Вызов:
#               $ slist      (Все файлы и подкаталоги)
#               $ slist *.*      (Все файлы)
#               $ slist *      (Все файлы и подкаталоги)
#               $ slist ab*      (Все файлы, начинающиеся на "ab")

homedir=` echo $HOME | cut -f1 -d' '  `
if [ "$homedir" = "" ]; then
        print "\nОшибка: \$HOME не установлен!!\n"
        exit
fi

cur_dir=`pwd`
#echo $cur_dir

len=${#homedir}
len=$(($len + 2))
#echo $len

subdir=` echo $cur_dir | cut -b $len-2000 `
#echo "subdir is : " $subdir

# Если файл уже извлечен другим разработчиком...
cvs_root=` echo $CVSROOT | cut -f1 -d' '  `
if [ "$cvs_root" = "" ]; then
        print "\nОшибка: \$CVSROOT не установлен!!\n"
        exit
fi

# Если текущий каталог не находится в корне CVS, то выход
if [ ! -d $CVSROOT/$subdir ]; then
        print "\nКаталог $subdir не существует в $CVSROOT"
        exit
fi

#echo "no of params : " $#
#echo "The arg $ 1 is : " $1
#echo "all args : " $@

if [ $# -eq 0 ]; then
        tmpbb=` find * -prune -type d `
elif [ $# -eq 1 ]; then
        if [ "$1" = "." ]; then
                tmpbb=` find * -prune -type d `
        else
                if [ -d $1 -a ! -d $CVSROOT/$subdir/$1 ]; then
                        print "\nКаталог $subdir/$1 не существует в $CVSROOT"
                        exit
                fi
                tmpbb=$@
        fi
else
        tmpbb=$@
fi

#echo "The tmpbb is : " $tmpbb

# Теперь удалим все имена каталогов, не существующих в корне CVS 
dirnames=""
for ii in $tmpbb ; do
        if [ -d $CVSROOT/$subdir/$ii ]; then
                dirnames="$dirnames $ii "
        fi
done
#echo "The dirnames is : " $dirnames

if [ "$dirnames" != "" ]; then
        find $dirnames  -type f |
        while read ii
        do
                # Перечислить только те файлы, которые находятся в CVS-системе
                if [ -f "$CVSROOT/$subdir/$ii,v" ]; then
                        #echo "ii is : " $ii
                        ls -l $ii | grep ^\-rw
                fi
        done;
fi

# Получить все файлы в текущем каталоге
listfiles=`ls $tmpbb `
find * -prune -type f |
while read ii
do
        for jj in $listfiles ; do
                if [ "$jj" = "$ii" ]; then
                        # Перечислить только те файлы, которые находятся в CVS-системе
                        if [ -f "$CVSROOT/$subdir/$ii,v" ]; then
                                #echo "ii is : " $ii
                                ls -l $ii | grep ^\-rw
                        fi
                fi
        done
done;