1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
#!/bin/bash
set -e
$PREPARE_CLEAN WC_COUNT=4 > /dev/null
$INCLUDE_FUNCS
cd $WC
function cmpdiff
{
[[ `cat $logfile` == *"--- $filename"*"$1"*"+++ $filename"*"$2"*"@@ -1 +1 @@"*"-$text"*"+$text$text" ]]
}
logfile=$LOGDIR/032.commit-pipe
logfile2=$logfile.2
filename=abcdefg.ijk
text=abcde.123
encoder="openssl enc -e -a"
decoder="openssl enc -d -a"
export encoder
# try with a few bytes first
echo $text > $filename
$BINq ps fsvs:commit-pipe "$encoder" $filename
$BINq ps fsvs:update-pipe "$decoder" $filename
$BINdflt ci -m1 > $logfile
rev=`grep "revision " $logfile | tail -1 | cut -f2 -d" " | cut -f1 -d" "`
rev_base64=$rev
base64=`$encoder < $filename`
repos_val=`svn cat $REPURL/$filename -r $rev_base64`
echo "Expect $base64, found $repos_val"
if [[ $repos_val == $base64 ]]
then
$SUCCESS "Commit-pipe works"
else
$ERROR "Encoded commit failed!"
fi
# Try update
$WC2_UP_ST_COMPARE
# Make sure both arrived there
if [[ X`$BINdflt pl -v $WC2/$filename | sort` == X"fsvs:commit-pipe=$encoder"*"fsvs:update-pipe=$decoder" ]]
then
$SUCCESS "En- and decoder arrived in $WC2."
else
$ERROR "En- or decoder didn't arrive in $WC2."
fi
# Try diff
echo $text$text > $filename
$BINdflt diff $filename > $logfile
if cmpdiff "Rev. $rev_base64" "Local version"
then
$SUCCESS "Diff works."
else
$ERROR "Error while diffing!"
fi
# use a different encoder
$BINq ps fsvs:commit-pipe "gzip" $filename
$BINq ps fsvs:update-pipe "gzip -d" $filename
# compare
$BINdflt diff $filename > $logfile
if cmpdiff "Rev. $rev_base64" "Local version"
then
$SUCCESS "Diff after changing the decoder works."
else
$ERROR "Error while diffing after setting another decoder!"
fi
# commit other encoder, and do repos-repos diff
$BINdflt ci -m2 > $logfile
rev=`grep "revision " $logfile | tail -1 | cut -f2 -d" " | cut -f1 -d" "`
rev_gzip=$rev
# diff -rx:y currently prints the full path - TODO
# If we'd just pipe to perl we wouldn't stop on error.
$BINdflt diff -r $rev_base64:$rev_gzip $filename > $logfile2
perl -pe 's('"$WC"'/*)()g' < $logfile2 > $logfile
if cmpdiff "Rev. $rev_base64" "Rev. $rev_gzip"
then
$SUCCESS "Repos-repos-diff works."
else
$ERROR "Error while doing repos-repos diff!"
fi
# The data should still be the same - we just committed, after all.
if [[ `$BINdflt st -C -C $filename | wc -l` != 0 ]]
then
$BINdflt info $filename
md5sum $filename
$ERROR "File seen as changed?"
fi
# Change data, using a temporary file to store the date,
# and see if it's found as changed.
tmp=x$filename
cp -a $filename $tmp
perl -e 'open(F, "+< " . shift) || die $!; print F $$;' $filename
touch -r $tmp $filename
# Should be seen when using checksums, and not without.
# With a single -C it would be checksummed if it's likely to be changed -
# which it is, because the ctime changed.
if [[ `$BINdflt st $filename -o change_check=none | wc -l` != 0 ||
`$BINdflt st $filename -o change_check=allfiles | wc -l` == 0 ]]
then
$BINdflt st $filename -o change_check=none
$BINdflt st $filename -o change_check=allfiles
$ERROR "File status wrong?"
fi
# now try with more data - to see if blocking works
cd $WC
seq -f%9.0f 1000000 1100000 > $filename
$BINdflt ci -m2
$WC2_UP_ST_COMPARE
# Try export
cd ${WCBASE}3
cd $WC
$INFO "Try with no data"
> $filename
$BINdflt ci -m4
$WC2_UP_ST_COMPARE
# Check for error checking
cd $WC
echo $text$text > $filename
$BINq ps fsvs:commit-pipe false $filename
if $BINq ci -m2 2> /dev/null
then
$ERROR "Error return of commit pipe not seen?"
else
$SUCCESS "Commit pipe gets checked for return level"
fi
# Delayed error
$BINq ps fsvs:commit-pipe "cat && false" $filename
if $BINq ci -m2 2> /dev/null
then
$ERROR "Delayed error return of commit pipe not seen?"
else
$SUCCESS "Commit pipe gets checked for return level, even for delayed"
fi
# vim: formatoptions=q
|