supdate

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

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

#!/bin/ksh

# CVS-программа supdate
# Программа для обновления файла из 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 <файл>"
        exit
fi

# Двойные кавычки для защиты пробелов в $1
tmpaa="$1"

# Проверка существования файла...
if [ $# -gt 0 -a  -f $tmpaa ]; then
        user_perms=" "
        group_perms=" "
        other_perms=" "
        user_perms=`ls -l $tmpaa | awk '{print $tmpaa }' | cut -b3-3 `
        group_perms=`ls -l $tmpaa | awk '{print $tmpaa }' | cut -b6-6 `
        other_perms=`ls -l $tmpaa | awk '{print $tmpaa }' | cut -b9-9 `
        if [ "$user_perms" = "w" -o "$group_perms" = "w"  \
                        -o "$other_perms" = "w" ]; then
                while :
                do
                        print "\n$cmdname сделает резервную копию Вашего рабочего файла "
                        print "$tmpaa в $tmpaa.supdate_bak перед выполнением слияния."
                        print "Вы уверены в желании объединения изменений из"
                        print -n "CVS-репозитория с Вашим рабочим файлом? <y/n> [n]: "
                        read ans
                        if [ "$ans" = "y" -o "$ans" = "Y" ]; then
                                if [ -f $tmpaa.supdate_bak ]; then
                                        print "\nВнимание: файл $tmpaa.supdate_bak уже существует!!"
                                        print "Пожалуйста просмотрите файл $tmpaa.supdate_bak и удалите его,"
                                        print "а затем повторно выполните эту команду $cmdname "
                                        print "Завершение $cmdname ...."
                                        exit
                                else
                                        cp $tmpaa $tmpaa.supdate_bak
                                        break
                                fi
                        elif [ "$ans" = "n" -o "$ans" = "N" -o "$ans" = "" -o "$ans" = " " ]; then
                                exit
                        fi
                done
        fi
fi

if [ -d $tmpaa ]; then
        print "\nОбновление каталога недоступно, потому что CVS update"
        print "объединяет изменения из репозитория с Вашим рабочим каталогом."
        print "Поэтому укажите файл для обновления, как показано ниже: "
        print " Вызов: $cmdname <файл>"
        exit
#       cvs update
else
        cvs update $tmpaa
fi

print "\n$cmdname удачно выполнен."
print "\n\nСделана резервная копия исходного файла как $tmpaa.supdate_bak"
print "\nПоэтому Ваш исходный файл СОХРАНЕН в $tmpaa.supdate_bak"
print "\n\n"
#print "\nTip (Usage): $cmdname <filename/directory name>\n"