트리에 있는 RCS 제어 파일이 체크인되지 않았는지 테스트합니다.

트리에 있는 RCS 제어 파일이 체크인되지 않았는지 테스트합니다.

여러 사용자의 버전 제어를 위해 RCS를 사용하는 레거시 코드 프로젝트 트리가 여러 개 있습니다. 나는 트리를 살펴보고 파일이 체크아웃되었는지 테스트할 수 있기를 원합니다(그래서 트리는 아직 배포 업데이트를 위해 패키징할 준비가 되지 않았습니다).

예를 들어 테스트 트리가 있습니다. 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

거기에 있는 모든 파일은 sfile1해당 RCS 디렉터리에 체크인됩니다. sfile1체크아웃 및 수정되었습니다.

rlog subdir1/sfile1(올바르게 체크아웃된 파일)은 다음을 반환합니다.

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
=============================================================================

그리고 rlog subdir2/sfile2(올바르게 체크인된 파일)은 다음을 반환합니다.

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
=============================================================================

그래서 내가 원하는 것은 디렉터리 인수가 주어지면 해당 디렉터리에서 RCS에 속한 모든 파일을 검색하고 체크인되지 않은 모든 파일의 이름을 반환하는 명령입니다. (이상적으로는 잠기지 않았지만 체크인된 버전과 다른 등 감지 가능한 다른 상태가 좋지 않은 경우에도 보고하세요.)

test_rcs_tree .

위의 간단한 경우에는 다음이 반환됩니다.

./subdir1/sfile1 checked-out

제가 알아내려고 하는 것은 모든 검색에서 누락된 것이 이미 이 작업을 수행하고 있는지 여부입니다.

저는 rcs 5.7, gnu awk 3.1.7, gnu make 3.81, bash 4.1.2가 포함된 RHEL 6.7에서 실행 중입니다.

답변1

레거시 rcs 상태 스크립트가 있습니다.

#!/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

디렉토리나 파일을 지정하면 다음과 같은 출력이 생성됩니다.

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

"동일 잠금 해제됨"은 체크인되었으며 읽기 전용임을 의미하며 이는 일반적으로 원하는 상태입니다.

답변2

나는 유틸리티를 사용한다checkup, 내가 1980년대 후반에 작성하고 그 결과를 내 카탈로그 편집기에 전달했습니다.ded, 여기에서 rcsdiff변경 사항을 실행, 잠금 해제 또는 되돌릴 수 있습니다.

예를 들어 스크린샷에는 체크인되지 않은 일부 파일과 마지막 체크인 날짜보다 최신 파일이 표시됩니다.

여기에 이미지 설명을 입력하세요.

관련 정보