cvs2svn-migration/trunk/post_cvs2svn

saq cvs at pld-linux.org
Wed Oct 5 01:08:18 CEST 2005


Author: saq
Date: Wed Oct  5 01:08:06 2005
New Revision: 6426

Modified:
   cvs2svn-migration/trunk/post_cvs2svn
Log:
- don't checkout a working copy, use immediate svn mv
  (~6x speedup, at the cost of generating more revisions)


Modified: cvs2svn-migration/trunk/post_cvs2svn
==============================================================================
--- cvs2svn-migration/trunk/post_cvs2svn	(original)
+++ cvs2svn-migration/trunk/post_cvs2svn	Wed Oct  5 01:08:06 2005
@@ -2,50 +2,81 @@
 
 . ./config
 
-rm -rf checkout
-echo "0. Checkout"
-svn -q co file://"$svndir" checkout
-cd checkout
+root="file://$svndir"
+
+SVN() {
+	svn -q -m'- [post_cvs2svn] applying package/{trunk,tags,branches} policy' "$@"
+}
+
+ls() {
+	ls_trunk="$(svn ls $root/trunk|sed s,/\$,,)"
+	ls_tags="$(svn ls $root/tags)"
+	ls_branches="$(svn ls $root/branches)"
+	in_trunk=""
+	for i in $ls_trunk;do
+		in_trunk="$in_trunk trunk/$i"
+	done
+	in_trunk="$in_trunk "
+	in_tags=""
+	for tag in $ls_tags; do
+		for i in $(svn ls $root/tags/$tag|sed s,/\$,,); do
+			in_tags="$in_tags tags/$tag$i"
+		done
+	done
+	in_tags="$in_tags "
+	in_branches=""
+	for branch in $ls_branches; do
+		for i in $(svn ls $root/branches/$branch|sed s,/\$,,); do
+			in_branches="$in_branches branches/$branch$i"
+		done
+	done
+	in_branches="$in_branches "
+}
+
+have() {
+	echo "$in_tags$in_branches"|grep -q " $1/[^/]*/$2 "
+}
+
+matching() {
+	echo "$in_tags$in_branches"|tr \  \\n|grep "^$1/[^/]*/$2\$"
+}
+
+ls
 
 echo "1. Moving */foo to foo/*"
-for pkgdir in {trunk,tags/*,branches/*}/*; do
+for pkgdir in $in_trunk $in_tags $in_branches; do
 	pkg=$(echo $pkgdir|sed s,.*/,,)
-	if [ -d $pkg ]; then
+	pkg_for_var=$(echo $pkg|tr .+- ___)
+	if [ -n "`eval echo \\$post_cvs2svn_saw_$pkg_for_var`" ]; then
 		continue
 	fi
-	svn -q mkdir $pkg
-	if [ -d trunk/$pkg ]; then
-		svn -q mv trunk/$pkg $pkg/trunk
+	eval post_cvs2svn_saw_$pkg_for_var=yes
+	SVN mkdir $root/$pkg
+	if [ "$pkgdir" = "trunk/$pkg" ]; then
+		SVN mv $root/trunk/$pkg $root/$pkg/trunk
 	fi
-	tagdirs="$(echo tags/*/$pkg)"
-	if [ "$tagdirs" != "tags/*/$pkg" ]; then
-		svn -q mkdir $pkg/tags
-		for dir in tags/*/$pkg; do
+	if have tags $pkg; then
+		SVN mkdir $root/$pkg/tags
+		for dir in $(matching tags $pkg); do
 			name=$(echo $dir|cut -d/ -f2)
-			svn -q mv $dir $pkg/tags/$name
+			SVN mv $root/$dir $root/$pkg/tags/$name
 		done
 	fi
-	branchdirs="$(echo branches/*/$pkg)"
-	if [ "$branchdirs" != "branches/*/$pkg" ]; then
-		svn -q mkdir $pkg/branches
-		for dir in branches/*/$pkg; do
+	if have branches $pkg; then
+		SVN mkdir $root/$pkg/branches
+		for dir in $(matching branches $pkg); do
 			name=$(echo $dir|cut -d/ -f2)
-			svn -q mv $dir $pkg/branches/$name
+			SVN mv $root/$dir $root/$pkg/branches/$name
 		done
 	fi
 done
-svn ci -m'- [post_cvs2svn] applying package/{trunk,tags,branches} policy'
-svn -q up
 
 echo "2. Removing empty leftover dirs"
 # assert nothing is left over, except .svn
-if [ "$(echo trunk/* tags/*/* branches/*/*)" != "trunk/* tags/*/* branches/*/*" ]; then
+ls
+if [ "$in_trunk$in_tags$in_branches" != "   " ]; then
 	echo "ERROR: something is left, it shouldn't happen"
 	exit 1
 fi
 # damn lucky there are no packages by these names
-svn rm -q trunk tags branches
-svn ci -m'- [post_cvs2svn] removing leftover directories'
-
-cd ..
-rm -rf checkout
+SVN rm $root/{trunk,tags,branches}



More information about the pld-cvs-commit mailing list