Teste se quaisquer arquivos controlados por RCS na árvore não são verificados

2

Eu tenho várias árvores de projeto de código legado que estão usando o RCS para controle de versão com vários usuários. Gostaria de poder percorrer a árvore e testar se algum arquivo está com check-out (e, portanto, a árvore não está pronta para ser empacotada para atualização de distribuição).

Por exemplo, eu tenho uma árvore de teste: tree -p .

.
├── [-r--r--r--]  file1
├── [drwxrwxr-x]  RCS
│   └── [-r--r--r--]  file1,v
├── [drwxrwxr-x]  subdir1
│   ├── [drwxrwxr-x]  RCS
│   │   └── [-r--r--r--]  sfile1,v
│   └── [-rw-r--r--]  sfile1
└── [drwxrwxr-x]  subdir2
├── [drwxrwxr-x]  RCS
│   └── [-r--r--r--]  sfile2,v
└── [-r--r--r--]  sfile2

5 directories, 6 files

Em que todos os arquivos, exceto sfile1 , são registrados em seus respectivos diretórios RCS. sfile1 foi verificado e modificado.

rlog subdir1/sfile1 (um arquivo que está com check-out propriamente dito) retorna:

RCS file: subdir1/RCS/sfile1,v
Working file: subdir1/sfile1
head: 1.1
branch:
locks: strict
    torfey: 1.1
access list:
symbolic names:
keyword substitution: kv
total revisions: 1; selected revisions: 1
description:
----------------------------
revision 1.1    locked by: torfey;
date: 2016/07/20 13:09:34;  author: torfey;  state: Exp;
Initial revision
=============================================================================

Considerando que rlog subdir2/sfile2 (um arquivo que está devidamente registrado) retorna:

RCS file: subdir2/RCS/sfile2,v
Working file: subdir2/sfile2
head: 1.1
branch:
locks: strict
access list:
symbolic names:
keyword substitution: kv
total revisions: 1; selected revisions: 1
description:
----------------------------
revision 1.1
date: 2016/07/20 13:10:04;  author: torfey;  state: Exp;
Initial revision
=============================================================================

Assim, o comando que eu gostaria iria, dado um argumento de diretório, procurar por todos os arquivos sob aquele diretório que são parte do RCS e retornar nomes de quaisquer que não estejam registrados. (Idealmente, também se houver algum outro estado que é detectável e ruim, como não bloqueado, mas diferente da versão registrada, relate isso também.)

test_rcs_tree .

Ele retornaria, para o meu caso simples acima:

./subdir1/sfile1 checked-out

O que estou enfrentando é se talvez exista algo que já faz isso e que estou perdendo em todas as minhas pesquisas.

Estou executando no RHEL 6.7, que possui rcs 5.7, gnu awk 3.1.7, gnu make 3.81, bash 4.1.2

    
por Torfey 20.07.2016 / 16:28

2 respostas

1

Eu tenho um script de status rcs herdado:

#!/bin/bash
find ${@:-.} -type f |
sed '\;/RCS/;d' |
while read file
do  msg=
    if [ -z "$(rlog -R "$file" 2>/dev/null)" ]
    then    msg="$msg no RCS"
    else    if co -q -kk -p "$file" | cmp -s - "$file" ||
               co -q -p "$file" | cmp -s - "$file"
            then    msg="$msg same"
            else    msg="$msg differs"
            fi
            if [ -z "$(rlog -L -R "$file")" ]
            then    msg="$msg not locked"
            else    msg="$msg locked"
                    user=$(rlog -h "$file" |
                           awk '/locks:/{ getline;
                                    sub(":"," "); print $1 }')
                    if [ -n "$user" ]
                    then    msg="$msg by $user"
                    fi
            fi
    fi
    if [ -w "$file" ]
    then    msg="$msg writeable"
    fi
    echo "$file: $msg"
done

Dê a ele um diretório ou arquivos e ele produzirá resultados como

whenerror: same not locked
kshrc: same not locked writeable
mylua.lua: no RCS writeable
subshell: differs locked by meuh writeable
mshrc: differs locked by meuh

onde "mesmo não bloqueado" significa que ele é registrado e somente leitura, normalmente o estado desejado.

    
por 20.07.2016 / 17:01
1

Eu uso um utilitário checkup , que escrevi no final dos anos 80, e canalizei resultados no meu editor de diretório ded , do qual posso executar rcsdiff , ou desbloquear ou reverter alterações.

Por exemplo, uma captura de tela mostrando alguns arquivos que não estão registrados, além de uma mais recente que a última data de check-in:

    
por 20.07.2016 / 21:52