diff tests/test-convert-p4-filetypes @ 8829:ce4b92f5cea7

convert: Make P4 conversion cope with keywords, binary files and symbolic links. Convert now handles errors from p4 during conversion more gracefully. If keyword expansion is enabled in a P4 file then keywords will be unexpanded in hg. Added testcase for p4 filetypes and keyword (un)expansion. This testcase ignores UTF and Apple files to avoid binary data. Edited by pmezard: fixed collation issue on OSX
author Frank Kingswood <frank@kingswood-consulting.co.uk>
date Thu, 18 Jun 2009 10:39:04 +0100
parents
children 95046688f80f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-p4-filetypes	Thu Jun 18 10:39:04 2009 +0100
@@ -0,0 +1,104 @@
+#!/bin/sh
+
+"$TESTDIR/hghave" p4 execbit symlink || exit 80
+
+echo "[extensions]" >> $HGRCPATH
+echo "convert = " >> $HGRCPATH
+
+echo % create p4 depot
+export P4ROOT=$PWD/depot
+export P4AUDIT=$P4ROOT/audit
+export P4JOURNAL=$P4ROOT/journal
+export P4LOG=$P4ROOT/log
+export P4PORT=localhost:16661
+export P4DEBUG=1
+export P4CHARSET=utf8
+
+echo % start the p4 server
+[ ! -d $P4ROOT ] && mkdir $P4ROOT
+p4d -f -J off -xi >$P4ROOT/stdout 2>$P4ROOT/stderr
+p4d -f -J off >$P4ROOT/stdout 2>$P4ROOT/stderr &
+trap "echo % stop the p4 server ; p4 admin stop" EXIT
+
+# wait for the server to initialize
+while ! p4 ; do
+   sleep 1
+done >/dev/null 2>/dev/null
+
+echo % create a client spec
+export P4CLIENT=hg-p4-import
+DEPOTPATH=//depot/test-mercurial-import/...
+p4 client -o | sed '/^View:/,$ d' >p4client
+echo View: >>p4client
+echo " $DEPOTPATH //$P4CLIENT/..." >>p4client
+p4 client -i <p4client
+
+echo % populate the depot
+TYPES="text binary symlink"
+TYPES="$TYPES text+m text+w text+x text+k text+kx text+ko text+l text+C text+D text+F text+S text+S2"
+TYPES="$TYPES binary+k binary+x binary+kx symlink+k"
+TYPES="$TYPES ctext cxtext ktext kxtext ltext tempobj ubinary uxbinary xbinary xltext xtempobj xtext"
+# not testing these
+#TYPES="$TYPES apple resource unicode utf16 uresource xunicode xutf16"
+for T in $TYPES ; do
+   T2=`echo $T | tr [:upper:] [:lower:]`
+   case $T in
+      apple)
+	 ;;
+      symlink*)
+         echo "this is target $T" >target_$T2
+         ln -s target_$T file_$T2
+         p4 add target_$T2
+         p4 add -t $T file_$T2
+         ;;
+      binary*)
+	 python -c "file('file_$T2', 'wb').write('this is $T')"
+         p4 add -t $T file_$T2
+         ;;
+      *)
+         echo "this is $T" >file_$T2
+         p4 add -t $T file_$T2
+         ;;
+   esac
+done
+p4 submit -d initial
+
+echo % test keyword expansion
+p4 edit file_* target_*
+for T in $TYPES ; do
+   T2=`echo $T | tr [:upper:] [:lower:]`
+   echo '$Id$'       >>file_$T2
+   echo '$Header$'   >>file_$T2
+   echo '$Date$'     >>file_$T2
+   echo '$DateTime$' >>file_$T2
+   echo '$Change$'   >>file_$T2
+   echo '$File$'     >>file_$T2
+   echo '$Revision$' >>file_$T2
+   echo '$Header$$Header$Header$' >>file_$T2
+done
+
+ln -s 'target_$Header$' crazy_symlink+k
+p4 add -t symlink+k crazy_symlink+k
+
+p4 submit -d keywords
+
+echo % check keywords in p4
+grep -H Header file_*
+
+echo % convert
+hg convert -s p4 $DEPOTPATH dst
+hg -R dst log --template 'rev={rev} desc="{desc}" tags="{tags}" files="{files}"\n'g
+
+echo % revision 0
+hg -R dst update 0
+head dst/file_* | cat -v
+
+echo
+echo % revision 1
+hg -R dst update 1
+head dst/file_* | cat -v
+echo
+echo % crazy_symlink
+readlink crazy_symlink+k
+readlink dst/crazy_symlink+k
+