Библиотека сайта rus-linux.net
sadd
Замечание: оболочка Korn /bin/ksh устанавливается инсталляцией pdksh*.rpm с компакт-диска дистрибутива Linux
Сохраните этот файл как текст и выполните для него "chmod a+rx".
#!/bin/ksh # CVS-программа sadd # Программа добавления файла в 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" cmdname=`basename $0` if [ $# -lt 1 ]; then print "\nВызов: $cmdname <файл/каталог> \n" exit fi onearg="$1" if [ ! -f "$onearg" -a ! -d "$onearg" ]; then print "\nАргумент $onearg не файл или каталог!" print "Вызов: $cmdname <файл/каталог> \n" exit fi # Аргумент имя каталога ..... homedir=` echo $HOME | cut -f1 -d' ' ` if [ "$homedir" = "" ]; then print "\nОшибка: \$HOME не установлен!!\n" exit fi cvs_root=` echo $CVSROOT | cut -f1 -d' ' ` if [ "$cvs_root" = "" ]; then print "\nОшибка: \$CVSROOT не установлен!!\n" exit fi cur_dir=`pwd` len=${#homedir} len=$(($len + 2)) subdir=` echo $cur_dir | cut -b $len-2000 ` #echo "subdir is : " $subdir tmpaa=`dirname "$onearg" ` if [ "$tmpaa" = "." ]; then fname="$onearg" if [ "$subdir" = "" ]; then subdir=$tmpaa fi else fname=`basename "$onearg" ` if [ "$subdir" = "" ]; then subdir=$tmpaa else subdir="$subdir/$tmpaa" fi fi #echo "subdir is : " $subdir #echo "fname is : " $fname # Для всех команд требуется каталог CVS в Вашем локальном каталоге... if [ ! -d "$homedir/$subdir/CVS" ]; then tmpaa=` (cd "$CVSROOT/$subdir"; find * -prune -type f -print | head -1 ) ` tmpbb=`basename $tmpaa | cut -d',' -f1 ` if [ "$tmpaa" = "" -o ! -f "$CVSROOT/$subdir/$tmpbb,v" ]; then print "\nКаталог $homedir/$subdir/CVS не существует" print "Вы должны выполнить sget в каталоге `basename $subdir`. Наберите" print " cd $homedir/`dirname $subdir` " print " sget `basename $subdir` " exit else # Теперь попытка создать CVS в локальном каталоге с помощью sget ( cd "$homedir" if [ "$subdir" = "." ]; then # не использовать точку -- это смешает CVS cvs -r checkout -A $tmpbb else cvs -r checkout -A "$subdir/$tmpbb" fi ) fi fi # Проверка существования файла... if [ $# -eq 1 ]; then if [ -f "$onearg" ]; then cvs add "$onearg" exit fi elif [ $# -gt 1 ]; then print "\n\n\nДобавление всех файлов в текущем каталоге к CVS" print "Каталоги добавлены не будут" print -n "Нажмите ВВОД для продолжения или CTRL+C для прервания..." read ans for ii in $@ do if [ -f "$ii" ]; then cvs add "$ii" fi done; exit fi # Когда $subdir равен ".", мы в корневом каталоге if [ "$subdir" = "." ]; then # В этом месте $onearg -- каталог, а не файл... if [ -d "$CVSROOT/$onearg" ]; then print "\nКаталог $onearg уже существует в CVSROOT" exit else # Добавление в корневой каталог $CVSROOT if [ "$2" = "" -o "$3" = "" ]; then print "\nВызов: $cmdname <каталог> <тэг поставщика> <тэг редакции>" print "Например: " print " $cmdname foo_directory V_1_0 R_1_0" exit else ( cd "$homedir/$subdir"; cvs import "$onearg" $2 $3 ) fi fi else # Если текущий каталог существует в CVS... if [ -d "$CVSROOT/$subdir/$onearg" ]; then print "\nКаталог $onearg уже в CVS-репозитории!" exit else ( if [ -d "$homedir/$subdir/$onearg/CVS" ]; then print "\nОшибка: Каталог $homedir/$subdir/$onearg/CVS существует!!" print "\nЗавершение работы..." exit fi # Для импорта мы ДОЛЖНЫ перейти в каталог назначения # и указать полный путь, начинающийся с $subdir cd "$homedir/$subdir/$onearg"; cvs import "$subdir/$onearg" Ver_1 Rel_1 ) fi fi |