2

信じられないほど大きくなったリポジトリがあり、リポジトリ内の各プロジェクトを個別のリポジトリに分割し始めます。ただし、ダンプ/ロード時に適切に一致しない Node-copyfrom-rev に関して、次のような問題がいくつか発生しました。

svnadmin: E160006: Relative source revision -18169 is not available in current repository
svnadmin: E160013: File not found: transaction '37-1c', path 'tags/1.6.1/file.php'

ダンプファイルとリビジョン定義を書き直す努力をしましたが、適切に一致していないようで、プロセスを自動化するのが難しくなっています。変更の提案は大歓迎ですが、svndumpfilter を使用することは実際にはオプションではないことに注意してください。これは、1 つのプロジェクトだけを分割するのに数時間かかり、このリポジトリには数千のリポジトリが含まれているためです。

#!/bin/bash

project=$1
repo=/root/svn-copy/oldrepo
rm -fr $project*
mkdir $project
cd $project
svnadmin create $project
i=1
svn log file://$repo $project | grep -e ".*r[0-9].*|.*" | awk '{ print substr($1,2) }' | sort -g | while read rev; do
    revs[$rev]=$i
    svnadmin dump $repo --quiet -r $rev --incremental >> $project.$rev.bak

# Rewrite revision number to ease rewrite of Node-copyfrom
perl -pi -e "s/Revision-number: $rev/Revision-number: $i/;" $project.$rev.bak
# Rewrite node-paths
perl -pi -e "s/Node-path: $project\//Node-path: /;" $project.$rev.bak
# Rewrite Node-copyfrom-path
perl -pi -e "s/Node-copyfrom-path: $project\//Node-copyfrom-path: /;" $project.$rev.bak

# Rewrite Node-copyfrom-rev
for rev in $(grep Node-copyfrom-rev $project.$i.bak | awk '{ print $2 }'); do
    perl -pi -e "s/Node-copyfrom-rev: $rev/Node-copyfrom-rev: ${revs[$rev]}/;" $project.$i.bak
done

# Remove prop for old project-folder
sed -i "/Node-path: $project/,/PROPS-END/d" $project.$rev.bak

svnadmin load --ignore-uuid $project < $project.$rev.bak
    let i=$i+1
    rm -fr $project.$rev.bak
done

svnadmin setuuid $project

リビジョン番号の書き換えにより、node-copyfrom-rev がいくらか緩和されましたが、完全ではありません。この方法でダンプすると、node-copyfrom-repo が間違ったポイントを指しているように見えることがあります。

4

0 に答える 0