#!/usr/bin/env bash
# plik receptury: workon
# workon--Przetwarzenie plików w systemie RCS

# Ustalenie bezpiecznej wartości ścieżki i wyeksportowanie jej
PATH=/usr/local/bin:/bin:/usr/bin
export PATH

VERSION='$Version: 1.4 $' # JP Vossen
COPYRIGHT='Copyright 2004-2006 JP Vossen (http://www.jpsdomain.org/)'
LICENSE='GNU GENERAL PUBLIC LICENSE'

CAT='/bin/cat'
if [ "$1" = "-h" -o "$1" = "--help" -o -z "$1" ]; then
    ${CAT} <<-EoN
        Użycie: $0 {plik}

        Przetwarznie pliku w systemie RCS. W razie potrzeby skrypt
        automatycznie tworzy podkatalog RCS. Jeśli to konieczne
        odsyła wstępnie plik prosząc o podanie komunikatu.
        Katalogiem bieżącym musi być katalog, w którym jest zapisany
        przetwarzany plik.
EoN
    exit 0
fi

# Utworzenie centralnego repozytorium
RCSHOMEDIR='/home/rcs'

# Sprawdzenie, czy zmienna $VISUAL ma jakąkolwiek wartość
[ "$VISUAL" ] || VISUAL=vi

###################################################################
# Początek głównego programu

# Sprawdzenie, czy istnieje katalog główny systemu RCS
if [ ! -d $RCSHOMEDIR ]; then
    echo "Tworzenie $RCSHOMEDIR..."
    mkdir -p $RCSHOMEDIR
fi

# Upewnienie się, że nie ma lokalnego katalogu RCS
if [ -d RCS -a ! -L RCS ]; then
    echo "Istnieje lokalny katalog 'RCS'--przerwanie działania!"
    exit 2
fi

# Sprawdzenie, czy ustnieje katalog docelowy
if [ ! -d $RCSHOMEDIR$PWD ]; then
    echo "Tworzenie $RCSHOMEDIR$PWD..."
    mkdir -p $RCSHOMEDIR$PWD
fi

# Sprawdzenie, czy istnieje dowiązanie
if [ ! -L RCS ]; then
    echo "Dowiązanie RCS --> $RCSHOMEDIR$PWD."
    ln -s $RCSHOMEDIR$PWD RCS
fi

if [ ! -f "RCS/$1,v" ]; then
    # Jeśli plik nie jest zarejestrowany w systemie RCS,
    # zostanie dodany jako plik wersji 1.0.

    echo 'Początkowe dodanie pliku do systemu RCS...'

    # Pobranie informacji
    echo -n 'Opisz plik: '
    read logmsg

    # Odesłanie wersji 1.0
    ci -u1.0 -t-"$logmsg" -m'Wersja początkowa' $1

else
    # Jeśli plik jest zarejestrowany w systemie RCS, zostanie wykorzystany.

    # Pobranie pliku z przeznaczeniem do edycji (plik jest blokowany).
    co -l $1

    # Lokalna edycja pliku
    $VISUAL $1

    # Odesłanie pliku i zatrzymanie kopii tylko do odczytu
    ci -u $1
fi
