tests/test-convert-p4-filetypes
author Frank Kingswood <frank@kingswood-consulting.co.uk>
Thu, 18 Jun 2009 10:39:04 +0100
changeset 8829 ce4b92f5cea7
child 9042 95046688f80f
permissions -rwxr-xr-x
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

#!/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