Migrasi PVCS ke SVN - Cara menulis Label PVCS ke Pesan Log SVN

Kami sedang dalam proses migrasi dari PVCS ke Subversion. Saya telah mendemonstrasikan ekspor PVCS => impor SVN yang berfungsi cukup baik bagi kami, tetapi kami memiliki satu masalah.

Kami telah banyak menggunakan label PVCS dan label ini memberi kami tautan yang jelas dan konsisten ke nomor Permintaan Pekerjaan (W.R.) kami. Saat kami bermigrasi ke SVN, label ini menjadi tag (yang sebenarnya tidak masalah) TETAPI kami juga menerapkan JIRA sehingga perlu menautkan versi SVN yang sesuai ke nomor terbitan JIRA. Hal ini dilakukan dengan menuliskan nomor penerbitan JIRA ke dalam pesan log SVN.

Sejauh ini; pada waktu Impor SVN saya membaca setiap pesan log SVN dan di mana saya menemukan nomor permintaan pekerjaan, saya menambahkan nomor masalah JIRA yang sesuai ke pesan log SVN (menggunakan skrip pasca-komitmen di SVN). Namun praktik penulisan W.R. ke dalam deskripsi penerapan PVCS bersifat opsional sedangkan penggunaan label PVCS bersifat wajib. Oleh karena itu banyak versi tidak memiliki nomor W.R. di log, hanya di label PVCS (atau menjadi Tag SVN).

Apakah ada cara saya dapat menemukan label versi PVCS selama impor SVN? Saya dapat melihatnya di file dump yang dibuat oleh ekspor PVCS di mana mereka menjadi bagian dari jalur Node.

Atau apakah ada laporan atau kueri yang dapat saya jalankan yang akan memberi saya daftar revisi untuk setiap tag?

Salam Karl


person Karl    schedule 18.03.2011    source sumber


Jawaban (1)


Saya akhirnya menyelesaikannya sendiri. Jika ada orang lain yang mengalami masalah yang sama, saya menemukan bahwa ada kemungkinan untuk mendapatkan daftar semua tag yang digunakan

svn ls <repo URL including tags location>

dan kemudian dapatkan versi di tag tersebut menggunakan

svn info ...

Dan AWK output SVN INFO menggunakan yang berikut ini. Catatan Saya harus mengurangi nomor versi sebanyak 1 untuk mendapatkan versi sebenarnya yang saya minati. Saya pikir ini karena selama impor SVN menyalin versi yang sesuai ke folder tag setelah membuat versi dan ini dianggap sebagai versi.

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 dan PTKEYFILE hanyalah file pencarian .csv untuk dicocokkan dengan format

PT_TICKET,PKEY,Issue Title

Kemudian saya menulis skrip sebagai berikut ...

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