การย้าย PVCS ไปยัง SVN - วิธีเขียนฉลาก PVCS ไปยัง SVN Log Msg

เรากำลังอยู่ระหว่างการย้ายจาก 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)

มีวิธีใดบ้างที่ฉันสามารถค้นหาป้ายกำกับเวอร์ชัน PVCS ระหว่างการนำเข้า SVN ฉันเห็นได้ในไฟล์ดัมพ์ที่สร้างโดยการส่งออก PVCS โดยที่ไฟล์เหล่านั้นจะกลายเป็นส่วนหนึ่งของ Node-path

หรือมีรายงานหรือแบบสอบถามที่ฉันสามารถเรียกใช้ซึ่งจะแสดงรายการการแก้ไขสำหรับแต่ละแท็กหรือไม่

ขอแสดงความนับถือคาร์ล


person Karl    schedule 18.03.2011    source แหล่งที่มา


คำตอบ (1)


ฉันจัดการเรื่องนี้ด้วยตัวเองในที่สุด หากใครประสบปัญหาแบบเดียวกัน พบว่าสามารถดึงรายการแท็กทั้งหมดที่ใช้ได้

svn ls <repo URL including tags location>

จากนั้นรับเวอร์ชันในแท็กเหล่านั้นโดยใช้

svn info ...

และ AWK เอาต์พุต SVN INFO โดยใช้ดังต่อไปนี้ หมายเหตุ ฉันต้องลดหมายเลขเวอร์ชันลง 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
person Karl    schedule 06.04.2011