2011-03-18 4 views
2

PVCS에서 Subversion으로 마이그레이션하는 중입니다. 나는 PVCS export => SVN 임포트를 데모 해 보았습니다. SVN import는 SVC 임포트를 꽤 잘했지만, 한가지 문제가 있습니다.PVCS에서 SVN으로 마이그레이션 - PVN 레이블을 SVN 로그 메시지에 쓰는 방법

우리는 PVCS 라벨을 광범위하게 사용하여 작업 요청 번호 (W.R.)에 대한 명확하고 일관된 링크를 제공합니다. SVN으로 마이그레이션 할 때이 레이블은 태그 자체가됩니다.하지만 JIRA도 구현 중이므로 적절한 SVN 버전을 JIRA 발행 번호에 연결해야합니다. 이것은 JIRA 이슈 번호를 SVN 로그 메시지에 기록함으로써 수행됩니다.

지금까지; SVN 가져 오기 시간에 각 SVN 로그 메시지를 읽으며 작업 요청 번호를 찾을 때 SVN 로그 메시지에 적절한 JIRA 발행 번호를 추가합니다 (SVN의 포스트 커밋 스크립트 사용). 그러나 PVCS 커밋 설명에 W.R.을 작성하는 관행은 선택적 이었지만 PVCS 레이블의 사용은 필수 사항이었습니다. 따라서 많은 버전의 로그에는 W.R. 번호가 없으며 PVCS 레이블 (또는 SVN 태그가 됨)에만 있습니다.

SVN 가져 오기 중에 PVCS 버전 레이블을 찾을 수있는 방법이 있습니까? PVCS 내보내기에서 생성 된 덤프 파일에서 노드 경로의 일부가되는 곳에서 볼 수 있습니다.

또는 각 태그에 대한 수정 목록을 제공하는 보고서 또는 쿼리가 있습니까?

감사 칼

답변

2

나는이에게 자신을 정렬 끝났다. 다른 사람이 같은 문제가있는 경우, 나는

svn info ... 

사용하여 해당 태그 버전을 얻을 다음

svn ls <repo URL including tags location> 

를 사용하는 모든 태그의 목록을 얻을 수 있었다 발견 그리고 AWK SVN의 정보 출력은 다음을 사용합니다. 참고 내가 관심있는 실제 버전을 얻으려면 버전 번호를 1 씩 줄여야했습니다. SVN이 가져 오는 동안 버전을 만든 후 approriate 버전을 태그 폴더에 복사하기 때문에이 버전이 고려되기 때문입니다.

BEGIN { RS=""; 
    FS = "\n"; } 
/^Path:/ { n1 = split($1,path,":"); 
      n3 = split($6,nodeKind, ":"); 
      n2 = split($9,lastRev,":"); 
      theRev = lastRev[2] -1; 
printf("%8s %10s, %-75s\n", theRev, nodeKind[2], path[2]); } 

WRKEYFILE 및 PTKEYFILE은 ...

PT_TICKET,PKEY,Issue Title 
다음

다음과 같이 나는 스크립트를 작성의 형식에 맞게 단지 .CSV 조회 파일입니다

REPO=svn://vuwunicocsagfg1/Banner/tags 
REPOPATH=/var/subversion/Banner 
WRKEYFILE=workReq_pKey.unix 
PTKEYFILE=ptTicket_pKey.unix 

# working variables 
TEMPFILE=$$.tmp 
TAGLIST=$$.tags 
REVISIONS=$$.revisions 
SVNINFO=$$.info 
SVNLOOK=/usr/bin/svnlook 


# look up details in Subversion 
svn info -R $REPO | awk -f new_svn_report.awk > $SVNINFO 
svn ls $REPO > $TAGLIST 

cat $TAGLIST | awk '{ print $1}' | while read LINE 
do 

    JIRAISSUE="" 
    WRNUM="" 
    PTNUM="" 
    UWRNUM="" 
    UPTNUM="" 

    # Find Work Request or Perfect Tracker number 
    WRNUM=$(echo "$LINE" | sed -n -e "s:.*\([wW][rR][0-9# -][0-9]\+\).*:\1:p") 
    PTNUM=$(echo "$LINE" | sed -n -e "s:.*\([pP][tT][0-9# -][0-9]\+\).*:\1:p") 

    # upper case the strings found and remove unwanted chars 
    UWRNUM=`echo $WRNUM| tr 'a-z' 'A-Z' | tr --delete '# -'` 
    UPTNUM=`echo $PTNUM| tr 'a-z' 'A-Z' | tr --delete '# -'` 
    # Debug 
    # echo "==============================" 
    # echo "Line is: $LINE, WRNUM is: $WRNUM, PTNUM is: $PTNUM" 

    if [[ -n "$UWRNUM" ]] 
    then 

     # Find the JIRA issue number 
     awk -F',' '/'"$UWRNUM"'/ {print $2}' $WRKEYFILE | awk '{if (NR==1) {print $0}}' > $TEMPFILE 
     JIRAISSUE=`cat $TEMPFILE` 

     awk -F',' '/'"$UWRNUM"'/ {print $2,"; " $3}' $WRKEYFILE | tr '"' '_' | awk '{if (NR==1) {print $0}}' > $TEMPFILE 
     NEWLOG=`cat $TEMPFILE` 

     # all revisions in this Tag which are not directories 
     grep $UWRNUM $SVNINFO | grep -v "directory" > $REVISIONS 
    fi 

    if [[ -n "$UPTNUM" ]] 
    then 
     # Find the JIRA issue number 
     awk -F',' '/'"$UPTNUM"'/ {print $2}' $PTKEYFILE | awk '{if (NR==1) {print $0}}' > $TEMPFILE 
     JIRAISSUE=`cat $TEMPFILE` 

     awk -F',' '/'"$UPTNUM"'/ {print $2,"; " $3}' $PTKEYFILE | tr '"' '_' | awk '{if (NR==1) {print $0}}' > $TEMPFILE 
     NEWLOG=`cat $TEMPFILE` 

     # all revisions in this Tag which are not directories 
     grep $UPTNUM $SVNINFO | grep -v "directory" > $REVISIONS 
    fi 

    if [[ -n "$JIRAISSUE" ]] 
    then 
     cat $REVISIONS | awk '{ print $1}' | while read REVLINE 
     do 

     $SVNLOOK log -r "$REVLINE" "$REPOPATH" | tr '"' '_' > $TEMPFILE 
     OLDLOG=`cat $TEMPFILE ` 

     if `echo $OLDLOG | grep "$JIRAISSUE" 1>/dev/null 2>&1` 
     then 
      LOGMSG=$OLDLOG 
     else 
      LOGMSG="$OLDLOG $NEWLOG" 
     fi 
     # Debug 
     # echo "Jira issue is: $JIRAISSUE" 
     # echo "update the log message for Revision $REVLINE" 
     # echo "New log message is: $LOGMSG" 
     # echo "***********************************" 

     echo "svn propset --revprop -r "$REVLINE" svn:log \""$LOGMSG"\" $REPO" 
     svn propset --revprop -r "$REVLINE" svn:log \""$LOGMSG"\" $REPO 
     echo "" 

     done 
    fi 
done