首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PVCS到SVN的迁移-如何将PVCS标签写入SVN日志消息

PVCS到SVN的迁移-如何将PVCS标签写入SVN日志消息
EN

Stack Overflow用户
提问于 2011-03-18 08:14:06
回答 1查看 3.3K关注 0票数 2

我们正在从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标签时)。

在SVN导入过程中,有没有办法找到PVCS版本标签?我可以在PVCS导出创建的转储文件中看到它们,其中它们成为Node-path的一部分。

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

向卡尔致敬

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-06 08:18:15

最后我自己整理了一下。如果其他人有同样的问题,我发现可以使用以下命令获得所有标签的列表

代码语言:javascript
复制
svn ls <repo URL including tags location>

然后使用以下命令获取这些标记中的版本

代码语言:javascript
复制
svn info ...

并使用下面的代码AWK SVN信息输出。注意:我必须将版本号减1才能得到我感兴趣的实际版本。我认为这是因为在导入过程中,SVN会在创建版本后将相应的版本复制到标记文件夹中,这被认为是一个版本。

代码语言:javascript
复制
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查找文件,其格式为

代码语言:javascript
复制
PT_TICKET,PKEY,Issue Title

然后我写了一个脚本,如下所示。

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5346807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档