【问题标题】:PVCS to SVN migration - How to write PVCS Labels to SVN Log MsgPVCS 到 SVN 迁移 - 如何将 PVCS 标签写入 SVN 日志消息
【发布时间】:2011-03-18 00:14:06
【问题描述】:

我们正在从 PVCS 迁移到 Subversion。我演示了一个 PVCS 导出 => SVN 导入,它对我们来说做得很好,但我们有一个问题。

我们已广泛使用 PVCS 标签,这些标签为我们提供了与工作请求编号 (W.R.) 的清晰一致的链接。当我们迁移到 SVN 时,这些标签成为标签(这本身很好)但是我们也在实施 JIRA,因此需要将适当的 SVN 版本链接到 JIRA 问题编号。这是通过将 JIRA 问题编号写入 SVN 日志消息来完成的。

到目前为止;在 SVN 导入时,我正在阅读每条 SVN 日志消息,并在找到工作请求编号的地方将适当的 JIRA 问题编号附加到 SVN 日志消息(使用 SVN 中的提交后脚本)。然而,将 W.R. 写入 PVCS 提交描述的做法是可选的,而 PVCS 标签的使用是强制性的。因此,许多版本在日志中没有 W.R. 编号,仅在 PVCS 标签中(或当它成为 SVN Tag 时)。

在SVN导入过程中,有什么方法可以找到PVCS版本标签吗?我可以在 PVCS 导出创建的转储文件中看到它们,它们成为节点路径的一部分。

或者,我可以运行一个报告或查询来为我提供每个标签的修订列表?

问候 卡尔

【问题讨论】:

    标签: svn pvcs


    【解决方案1】:

    我最终自己整理了这个。如果其他人有同样的问题,我发现可以使用

    获取所有标签的列表
    svn ls <repo URL including tags location>
    

    然后使用

    获取这些标签中的版本
    svn info ...
    

    并使用以下方法对 SVN INFO 输出进行 AWK。请注意,我必须将版本号减 1 以获得我感兴趣的实际版本。我认为这是因为在导入期间,SVN 在创建版本后将适当的版本复制到标签文件夹,这被认为是一个版本。

    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 只是 .csv 查找文件,用于匹配格式为

    PT_TICKET,PKEY,Issue Title
    

    然后我写了一个脚本如下...

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-04
      • 1970-01-01
      • 1970-01-01
      • 2017-12-03
      相关资源
      最近更新 更多