Naprej Nazaj Kazalo

12. Lupinski skripti za RCS

Če želite namesto CVS uporabljati RCS, si lahko pomagate z naslednjimi lupinskimi skripti.

12.1 cotree.sh


#!/bin/ksh

# cotree.sh (lupinski skript za prevzemanje drevesa)
# cotree.sh - Prevzame celotni imenik iz RCS

# Uporaba :
# Tako boste dobili vse imenike
#       unix> cotree.sh 
#
# Tako pa boste dobili samo drevo iz enega imenika
#       unix> cotree.sh <ime imenika>

# Oglejte si tudi cofiles.sh

###############################################################
# Nastavljanje RCS (Revision Control System)
# Namestite si programe RCS - dobili boste ukaze co, ci, rcslog
# Naredite domači imenik za RCS, kamor boste odlagali datoteke
# iz skladišča izvorne kode. Recimo, da se imenuje 
# $RCSDIR=/home/rcs_version_control
# Nastavite vrednost spremenljivki okolja RCSDIR=/home/rcs_version_control
# v datoteki $HOME/.profile. Npr.
#               export RCSDIR=/home/rcs_version_control
# Pod $RCSDIR naredite imeniško strukturo in vanjo vločite vse vaše
# datoteke z uporabo ci . Oglejte si 'man ci'
# Sedaj naredite povezavo iz vašega domačega imenika do vašega projekta
# pod $RCSDIR
#               cd $HOME
#               mkdir $HOME/myproject
#               cd $HOME/myproject
# in poženite ta skript, da boste dobili vse datoteke in drevo imenikov
#               cotree.sh
# Ta skript bo naredil celotno drevo izvorne kode v uporabnikov
# domači imenik in bo imel tudi mehko povezavo do imenikov RCS. Vsak 
# uporabnik bo pognal ta skript v svojem domačem imeniku.
###############################################################

check_out_directory()
{
        # Korenski imenik RCS (revision control system)
        # npr.  RCSDIR=/home/rcs_version_control
        RCSDIR=$1
        DIRNAME=$2

        # Ime podanega imenika mora obstajati v korenskem imeniku RCS
        if [ "$DIRNAME" = "" -o  ! -d $RCSDIR/$DIRNAME ]; then
                print "\nImenik DIRNAME=$DIRNAME ne obstaja!!"
                print "\nPrekinjam program ... in končujem ...\n"
                exit
        fi
        
        mkdir -p $DIRNAME
        ln -s $RCSDIR/$DIRNAME/RCS $DIRNAME
        (
                cd $DIRNAME

                # To ne bo uspelo v primeru ime datoteke=vzorec,vv 
                # kar bo znotraj RCS enako RCS/vzorec,vv,v
                # ls RCS | cut -d',' -f1 | xargs co
                # Uporabite ujemanje za konec imena $, kot je spodaj -
                # Uporabite ls RCS/*, da se znebite imen ./ in ../
                #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 je : $ii"
                                if [ -f "RCS/$ii,v" ]; then
                                        co $ii
                                fi
                        done
                fi
        )
}

# Korenski imenik (revision control system)
# npr. RCSDIR=/home/rcs_version_control
if [ "$RCSDIR" = "" -o ! -d $RCSDIR ]; then
        print "\nImenik RCSDIR=$RCSDIR ne obstaja!!"
        print "\nPrekinjam program ... in ga končujem...\n"
        exit
fi
#echo "RCSDIR je : $RCSDIR"

# Če je kot argument podano ime imenika, potem prevzemi vse
# datoteke samo za ta imenik in končaj.
if [ "$1" != "" ]; then
        (cd $RCSDIR; find $1 -type d -print ) | 
        while read DIRNAME
        do
                #echo DIRNAME=$DIRNAME
                #DIRNAME=c_src
                #Korenski imenik RCS in ime imenika naj bosta relativna na rcs root dir
                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
                # Korenski imenik RCS in ime imenika naj bosta relativna na rcs root dir
                tmpaa=` basename $DIRNAME `
                if [ "$tmpaa" != "RCS" ]; then
                        check_out_directory $RCSDIR $DIRNAME
                fi
        done
fi

12.2 cofiles.sh


#!/bin/ksh

# cofiles.sh (Lupinski skript za prevzemanje datotek)
# cofiles.sh - Prevzemi vse datoteke v trenutnem imeniku iz RCS
# Oglejte si tudi cotree.sh in 'man rcsclean'

if [ ! -d RCS ]; then
        print "\nImenik RCS ne obstaja!!"
        print "\nPrekinjam program ... in ga končujem...\n"
        exit
fi

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

while true
do
        print -n "\n\nPrevzamem vse datoteke s pravicami branja in pisanja (read-write)? <d/n> [n]: "
        read ans
        if [ "$ans" = "" -o "$ans" = "n" -o "$ans" = "N" ]; then
                ans="N"
                break
        elif [ "$ans" = "d" -o "$ans" = "D" ]; then
                ans="D"
                break
        else
                print "\nNapačen vnos! Poskusite znova!!"
        fi
done
#echo "The ans is : " $ans

if [ $# -eq 0 ]; then
        # 'ls RCS' ne uspe v primeru ime_datoteke=vzorec,vv v RCS/vzorec,vv,v
        # ls RCS | cut -d',' -f1 | xargs co
        # Uporabite ujemanje, da se ime konča z $, kot je razvidno spodaj -
        if [ "$ans" = "D" ]; 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
                # V tem primeru bo $1 kot dbalter.sql
                # in ne kot db*.sql....
                #echo "One arg, no. of args = " $# " and all args " $@
                if [ "$ans" = "D" ]; then
                        co -l "$1"
                else
                        co "$1"
                fi
        else
                # V primeru, ko je $1=db*.sql in v trenutnem imeniku
                # ni nobenega db*.sql
                #echo "No files... no. of args = " $# " and all args " $@
                tmpaa="RCS/$1,v"  # bo kot RCS/db*.sql,v
                ls $tmpaa | \
                while read ii
                do
                        #echo "ii is : $ii"
                        if [ "$ans" = "D" ]; then
                                co -l "$ii"
                        else
                                co "$ii"
                        fi
                done
        fi
else
        for ii in $@
        do
                #echo "ii is : $ii,v"
                if [ "$ans" = "D" ]; then
                        co -l "$ii"
                else
                        co "$ii"
                fi
        done
fi

12.3 ciall.sh


#!/bin/ksh

# ciall.sh (Lupinski skript za vlaganje datotek)
# ciall.sh - Vloži vse datoteke v trenutnem imeniku v RCS
# Ta skript je zelo koristen za vlaganje ogromnega števila novih datotek
# v RCS. Prihrani čas, ker ni potrebno tipkati "opisa" za vsako datoteko.
# Za datoteke, ki so že v RCS, izvede običajen ukaz check-in.


# Pretvorba imen datotek v male črke:
# 'tr', see '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 "\nImenik RCS ne obstaja!!"
        print "\nImenik RCS bo narejen sedaj ...\n"
        mkdir RCS
fi

print "\n\nOpomba: To ni dnevniško sporočilo!"
print "Prosim, vnesite opis (uporabil se bo za"
print -n "vse vložene datoteke) : "
read description

# Izbira prune ne deluje, uporabi -maxdepth 0
#find * -prune -type f | 

# Število podanih izbir je nič ali več.... 
if  [ $# -eq 0 ]; then
        listoffiles="*"
else
        listoffiles="$@"
fi

# Izbira prune ne deluje, uporabi -maxdepth 0
#find $listoffiles -prune -type f | 
find $listoffiles -maxdepth 0 -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


Naprej Nazaj Kazalo