Рейтинг@Mail.ru
[Войти] [Зарегистрироваться]

Наши друзья и партнеры

UnixForum
Беспроводные выключатели nooLite

Lines Club

Ищем достойных соперников.




Книги по Linux (с отзывами читателей)

Библиотека сайта или "Мой Linux Documentation Project"

RCS Скрипты оболочки

Если Вы хотите использовать RCS вместо CVS, то могут пригодиться следующие скрипты оболочки.

cotree.sh

#!/bin/ksh

# cotree.sh (Скрипт оболочки для извлечения дерева каталогов)
# cotree.sh - Извлечение целого RCS-каталога

# Вызов:
# Для получения всех каталогов:
#       unix> cotree.sh 
#
# Для получения дерева единственного каталога:
#       unix> cotree.sh <имя каталога>

# Смотрите также cofiles.sh

###############################################################
# Установка RCS (Revision Control System)
# Инсталлируйте программы RCS -- появятся команды co, ci, rcslog
# Создайте домашний каталог RCS, куда Вы поместите репозиторий
# исходного кода. Выполните $RCSDIR=/home/rcs_version_control
# Задайте переменную окружения RCSDIR=/home/rcs_version_control
# в файле $HOME/.profile. Так:
#               export RCSDIR=/home/rcs_version_control
# Создайте структуру каталогов в $RCSDIR и занесите туда все
# ваши файлы с помощью ci. Смотрите "man ci"
# Теперь создайте связь из Вашего домашнего каталога со своим
# проектом в $RCSDIR
#               cd $HOME
#               mkdir $HOME/myproject
#               cd $HOME/myproject
# и запустите следующий скрипт чтобы получить все файлы и дерево
# каталогов:
#               cotree.sh
# Данный скрипт создаст целое дерево исходного кода в домашнем 
# каталоге пользователя и будет иметь мягкую ссылку на каталоги
# RCS. Каждый пользователь запустит этот скрипт в своем домашнем
# каталоге.
###############################################################

check_out_directory()
{
        # Корневой каталог RCS (Revision Control System)
        # подобно RCSDIR=/home/rcs_version_control
        RCSDIR=$1
        DIRNAME=$2

        # Заданный каталог должен существовать в корневом каталоге RCS
        if [ "$DIRNAME" = "" -o  ! -d $RCSDIR/$DIRNAME ]; then
                print "\nКаталог DIRNAME=$DIRNAME не существует!!"
                print "\nЗавершение программы... и выход...\n"
                exit
        fi
        
        mkdir -p $DIRNAME
        ln -s $RCSDIR/$DIRNAME/RCS $DIRNAME
        (
                cd $DIRNAME

                # Неудача, если имя_файла=sample,vv что в RCS
                # будет RCS/sample,vv,v
                # ls RCS | cut -d',' -f1 | xargs co
                # Используем сопоставление с концом имени $, как ниже
                # Используем ls RCS/* во избежание прибавления к 
                # именам ./ и ../
                #ls RCS/* | cut -d'/' -f2 | sed -e's/,v$//g' | xargs co
                if [ -d RCS ]; then
                        ls RCS/* | cut -d'/' -f2 | sed -e's/,v$//g' | \
                        while read ii
                        do
                                #echo "ii is : $ii"
                                if [ -f "RCS/$ii,v" ]; then
                                        co $ii
                                fi
                        done
                fi
        )
}

# Корневой каталог RCS (Revision Control System)
# подобно RCSDIR=/home/rcs_version_control
if [ "$RCSDIR" = "" -o ! -d $RCSDIR ]; then
        print "\nКаталог RCSDIR=$RCSDIR не существует!!"
        print "\nЗавершение программы... и выход...\n"
        exit
fi
#echo "rcsdir is : $RCSDIR"

# Если передан аргумент-каталог, то извлекаем все файлы
# только для этого каталога и выходим.
if [ "$1" != "" ]; then
        (cd $RCSDIR; find $1 -type d -print ) | 
        while read DIRNAME
        do
                #echo DIRNAME=$DIRNAME
                #DIRNAME=c_src
                # Передай корневой каталог RCS и имя каталога относительно
                # корневого каталога RCS
                tmpaa=` basename $DIRNAME `
                if [ "$tmpaa" != "RCS" ]; then
                        check_out_directory $RCSDIR $DIRNAME
                fi
        done
else
        (cd $RCSDIR; find * -type d -print ) | 
        while read DIRNAME
        do
                echo DIRNAME=$DIRNAME
                #DIRNAME=c_src
                # Передай корневой каталог RCS и имя каталога относительно
                # корневового каталога RCS
                tmpaa=` basename $DIRNAME `
                if [ "$tmpaa" != "RCS" ]; then
                        check_out_directory $RCSDIR $DIRNAME
                fi
        done
fi

cofiles.sh

#!/bin/ksh

# cofiles.sh (Скрипт оболочки для извлечения файлов)
# cofiles.sh - Извлечь все файлы из RCS в текущий каталог
# Смотрите также cotree.sh и "man rcsclean"

if [ ! -d RCS ]; then
        print "\nКаталог RCS не существует!!"
        print "\nЗавершение программы... и выход...\n"
        exit
fi

#echo "No. of args = " $# " and all args " $@

while true
do
        print -n "\n\nИзвлечь все файлы в режиме чтения-записи? <y/n> [n]: "
        read ans
        if [ "$ans" = "" -o "$ans" = "n" -o "$ans" = "N" ]; then
                ans="N"
                break
        elif [ "$ans" = "y" -o "$ans" = "Y" ]; then
                ans="Y"
                break
        else
                print "\nОшибочный ввод! Попробуйте снова!!"
        fi
done
#echo "The ans is : " $ans

if [ $# -eq 0 ]; then
        # "ls RCS" терпит неудачу в случае имя_файла=sample,vv в RCS/sample,vv,v
        # ls RCS | cut -d',' -f1 | xargs co
        # Используем сопоставление с концом имени $, как ниже
        if [ "$ans" = "Y" ]; then
                ls RCS | sed -e's/,v$//g' | xargs co -l 
        else
                ls RCS | sed -e's/,v$//g' | xargs co
        fi
elif [ $# -eq 1 ]; then
        if [ -f "RCS/$1,v" ]; then
                # Здесь, в этом случае $1 будет подобен dbalter.sql,
                # а не db*.sql...
                #echo "One arg, no. of args = " $# " and all args " $@
                if [ "$ans" = "Y" ]; then
                        co -l "$1"
                else
                        co "$1"
                fi
        else
                # Для случая, когда $1=db*.sql и нет db*.sql в
                # текущем каталоге
                #echo "No files... no. of args = " $# " and all args " $@
                tmpaa="RCS/$1,v"  # будет вроде RCS/db*.sql,v
                ls $tmpaa | \
                while read ii
                do
                        #echo "ii is : $ii"
                        if [ "$ans" = "Y" ]; then
                                co -l "$ii"
                        else
                                co "$ii"
                        fi
                done
        fi
else
        for ii in $@
        do
                #echo "ii is : $ii,v"
                if [ "$ans" = "Y" ]; then
                        co -l "$ii"
                else
                        co "$ii"
                fi
        done
fi

ciall.sh

#!/bin/ksh

# ciall.sh (Скрипт оболочки для фиксации файлов)
# ciall.sh - Загрузка всех файлов текущего каталога в RCS
# Данный скрипт очень полезен для загрузки огромного количества
# новых файлов в RCS. Экономит время, избегая необходимости
# набора "описания" для каждого файла
# Для файлов уже в RCS, выполняет обычную команду check-in


# Чтобы преобразовать имена файлов в нижний регистр,
# воспользуйтесь следующей техникой; используйте "tr",
# смотрите "man tr"
#ls * | \
#while read ii
#do
#       jj=`echo $ii | tr [A-Z] [a-z] `
#       echo "ii is : $ii"
#       echo "jj is : $jj"
#       mv $ii $jj
#done

if [ ! -d RCS ]; then
        print "\nКаталог RCS не существует!!"
        print "\nСоздаю каталог RCS...\n"
        mkdir RCS
fi

print "\n\nВНИМАНИЕ: это не лог-сообщение!"
print "Пожалуйста, введите описание (будет использовано для"
print -n "всех фиксируемых файлов): "
read description

#find * -prune -type f | 

# Количество аргументов нулевое или больше.... 
if  [ $# -eq 0 ]; then
        listoffiles="*"
else
        listoffiles="$@"
fi

find $listoffiles -prune -type f | 
while read ii
do
        #echo $ii
        if [ -f "RCS/$ii,v" ]; then
                #print "The file $ii already in RCS"
                ci -m"$description" $ii 
        else
                #print "The file $ii is new file"
                ci $ii << EOF
$description
EOF
        fi
done

Эта статья еще не оценивалась
Вы сможете оценить статью и оставить комментарий, если войдете или зарегистрируетесь.
Только зарегистрированные пользователи могут оценивать и комментировать статьи.

Комментарии отсутствуют