mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 08:47:12 +03:00
6533e94352
This hash function is broken and should not be used by new code. It is currently only used by keepalive.
122 lines
3.2 KiB
Bash
Executable File
122 lines
3.2 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
mkdir test
|
|
cd test
|
|
hg init
|
|
echo foo>foo
|
|
hg commit -Am 1 -d '1 0'
|
|
echo bar>bar
|
|
hg commit -Am 2 -d '2 0'
|
|
mkdir baz
|
|
echo bletch>baz/bletch
|
|
hg commit -Am 3 -d '1000000000 0'
|
|
echo "[web]" >> .hg/hgrc
|
|
echo "name = test-archive" >> .hg/hgrc
|
|
cp .hg/hgrc .hg/hgrc-base
|
|
|
|
# check http return codes
|
|
test_archtype() {
|
|
echo "allow_archive = $1" >> .hg/hgrc
|
|
hg serve -p $HGPORT -d --pid-file=hg.pid -E errors.log
|
|
cat hg.pid >> $DAEMON_PIDS
|
|
echo % $1 allowed should give 200
|
|
"$TESTDIR/get-with-headers.py" localhost:$HGPORT "/archive/tip.$2" | head -n 1
|
|
echo % $3 and $4 disallowed should both give 403
|
|
"$TESTDIR/get-with-headers.py" localhost:$HGPORT "/archive/tip.$3" | head -n 1
|
|
"$TESTDIR/get-with-headers.py" localhost:$HGPORT "/archive/tip.$4" | head -n 1
|
|
"$TESTDIR/killdaemons.py"
|
|
cat errors.log
|
|
cp .hg/hgrc-base .hg/hgrc
|
|
}
|
|
|
|
echo
|
|
test_archtype gz tar.gz tar.bz2 zip
|
|
test_archtype bz2 tar.bz2 zip tar.gz
|
|
test_archtype zip zip tar.gz tar.bz2
|
|
|
|
echo "allow_archive = gz bz2 zip" >> .hg/hgrc
|
|
hg serve -p $HGPORT -d --pid-file=hg.pid -E errors.log
|
|
cat hg.pid >> $DAEMON_PIDS
|
|
|
|
echo % invalid arch type should give 404
|
|
"$TESTDIR/get-with-headers.py" localhost:$HGPORT "/archive/tip.invalid" | head -n 1
|
|
echo
|
|
|
|
TIP=`hg id -v | cut -f1 -d' '`
|
|
QTIP=`hg id -q`
|
|
cat > getarchive.py <<EOF
|
|
import os, sys, urllib2
|
|
try:
|
|
# Set stdout to binary mode for win32 platforms
|
|
import msvcrt
|
|
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
|
|
except ImportError:
|
|
pass
|
|
|
|
node, archive = sys.argv[1:]
|
|
f = urllib2.urlopen('http://127.0.0.1:%s/?cmd=archive;node=%s;type=%s'
|
|
% (os.environ['HGPORT'], node, archive))
|
|
sys.stdout.write(f.read())
|
|
EOF
|
|
http_proxy= python getarchive.py "$TIP" gz | gunzip | tar tf - 2>/dev/null | sed "s/$QTIP/TIP/"
|
|
http_proxy= python getarchive.py "$TIP" bz2 | bunzip2 | tar tf - 2>/dev/null | sed "s/$QTIP/TIP/"
|
|
http_proxy= python getarchive.py "$TIP" zip > archive.zip
|
|
unzip -t archive.zip | sed "s/$QTIP/TIP/"
|
|
|
|
"$TESTDIR/killdaemons.py"
|
|
|
|
hg archive -t tar test.tar
|
|
tar tf test.tar
|
|
|
|
hg archive -t tbz2 -X baz test.tar.bz2
|
|
bunzip2 -dc test.tar.bz2 | tar tf - 2>/dev/null
|
|
|
|
hg archive -t tgz -p %b-%h test-%h.tar.gz
|
|
gzip -dc test-$QTIP.tar.gz | tar tf - 2>/dev/null | sed "s/$QTIP/TIP/"
|
|
|
|
cat > md5comp.py <<EOF
|
|
try:
|
|
from hashlib import md5
|
|
except ImportError:
|
|
from md5 import md5
|
|
import sys
|
|
f1, f2 = sys.argv[1:3]
|
|
h1 = md5(file(f1, 'rb').read()).hexdigest()
|
|
h2 = md5(file(f2, 'rb').read()).hexdigest()
|
|
print h1 == h2 or "md5 differ: " + repr((h1, h2))
|
|
EOF
|
|
|
|
# archive name is stored in the archive, so create similar
|
|
# archives and rename them afterwards.
|
|
hg archive -t tgz tip.tar.gz
|
|
mv tip.tar.gz tip1.tar.gz
|
|
sleep 1
|
|
hg archive -t tgz tip.tar.gz
|
|
mv tip.tar.gz tip2.tar.gz
|
|
python md5comp.py tip1.tar.gz tip2.tar.gz
|
|
|
|
hg archive -t zip -p /illegal test.zip
|
|
hg archive -t zip -p very/../bad test.zip
|
|
|
|
hg archive --config ui.archivemeta=false -t zip -r 2 test.zip
|
|
unzip -t test.zip
|
|
|
|
hg archive -t tar - | tar tf - 2>/dev/null | sed "s/$QTIP/TIP/"
|
|
|
|
hg archive -r 0 -t tar rev-%r.tar
|
|
if [ -f rev-0.tar ]; then
|
|
echo 'rev-0.tar created'
|
|
fi
|
|
|
|
hg archive -t bogus test.bogus
|
|
|
|
echo % server errors
|
|
cat errors.log
|
|
|
|
echo '% empty repo'
|
|
hg init ../empty
|
|
cd ../empty
|
|
hg archive ../test-empty
|
|
|
|
exit 0
|