--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-archive.t Sat Aug 14 02:22:10 2010 +0200
@@ -0,0 +1,220 @@
+ $ mkdir test
+ $ cd test
+ $ hg init
+ $ echo foo>foo
+ $ hg commit -Am 1 -d '1 0'
+ adding foo
+ $ echo bar>bar
+ $ hg commit -Am 2 -d '2 0'
+ adding bar
+ $ mkdir baz
+ $ echo bletch>baz/bletch
+ $ hg commit -Am 3 -d '1000000000 0'
+ adding baz/bletch
+ $ echo "[web]" >> .hg/hgrc
+ $ echo "name = test-archive" >> .hg/hgrc
+ $ cp .hg/hgrc .hg/hgrc-base
+ > 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
+ > }
+
+check http return codes
+
+
+ $ test_archtype gz tar.gz tar.bz2 zip
+ % gz allowed should give 200
+ 200 Script output follows
+ % tar.bz2 and zip disallowed should both give 403
+ 403 Archive type not allowed: bz2
+ 403 Archive type not allowed: zip
+ $ test_archtype bz2 tar.bz2 zip tar.gz
+ % bz2 allowed should give 200
+ 200 Script output follows
+ % zip and tar.gz disallowed should both give 403
+ 403 Archive type not allowed: zip
+ 403 Archive type not allowed: gz
+ $ test_archtype zip zip tar.gz tar.bz2
+ % zip allowed should give 200
+ 200 Script output follows
+ % tar.gz and tar.bz2 disallowed should both give 403
+ 403 Archive type not allowed: gz
+ 403 Archive type not allowed: 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
+
+invalid arch type should give 404
+
+ $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT "/archive/tip.invalid" | head -n 1
+ 404 Unsupported archive type: None
+
+ $ 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
+ $ python getarchive.py "$TIP" gz | gunzip | tar tf - 2>/dev/null | sed "s/$QTIP/TIP/"
+ test-archive-TIP/.hg_archival.txt
+ test-archive-TIP/bar
+ test-archive-TIP/baz/bletch
+ test-archive-TIP/foo
+ $ python getarchive.py "$TIP" bz2 | bunzip2 | tar tf - 2>/dev/null | sed "s/$QTIP/TIP/"
+ test-archive-TIP/.hg_archival.txt
+ test-archive-TIP/bar
+ test-archive-TIP/baz/bletch
+ test-archive-TIP/foo
+ $ python getarchive.py "$TIP" zip > archive.zip
+ $ unzip -t archive.zip | sed "s/$QTIP/TIP/"
+ Archive: archive.zip
+ testing: test-archive-TIP/.hg_archival.txt OK
+ testing: test-archive-TIP/bar OK
+ testing: test-archive-TIP/baz/bletch OK
+ testing: test-archive-TIP/foo OK
+ No errors detected in compressed data of archive.zip.
+
+ $ "$TESTDIR/killdaemons.py"
+
+ $ hg archive -t tar test.tar
+ $ tar tf test.tar
+ test/.hg_archival.txt
+ test/bar
+ test/baz/bletch
+ test/foo
+
+ $ hg archive -t tbz2 -X baz test.tar.bz2
+ $ bunzip2 -dc test.tar.bz2 | tar tf - 2>/dev/null
+ test/.hg_archival.txt
+ test/bar
+ test/foo
+
+ $ 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/"
+ test-TIP/.hg_archival.txt
+ test-TIP/bar
+ test-TIP/baz/bletch
+ test-TIP/foo
+
+ $ hg archive autodetected_test.tar
+ $ tar tf autodetected_test.tar
+ autodetected_test/.hg_archival.txt
+ autodetected_test/bar
+ autodetected_test/baz/bletch
+ autodetected_test/foo
+
+The '-t' should override autodetection
+
+ $ hg archive -t tar autodetect_override_test.zip
+ $ tar tf autodetect_override_test.zip
+ autodetect_override_test.zip/.hg_archival.txt
+ autodetect_override_test.zip/bar
+ autodetect_override_test.zip/baz/bletch
+ autodetect_override_test.zip/foo
+
+ $ for ext in tar tar.gz tgz tar.bz2 tbz2 zip; do
+ > hg archive auto_test.$ext
+ > if [ -d auto_test.$ext ]; then
+ > echo "extension $ext was not autodetected."
+ > fi
+ > done
+
+ $ 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
+ True
+
+ $ hg archive -t zip -p /illegal test.zip
+ abort: archive prefix contains illegal components
+ $ 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
+ Archive: test.zip
+ testing: test/bar OK
+ testing: test/baz/bletch OK
+ testing: test/foo OK
+ No errors detected in compressed data of test.zip.
+
+ $ hg archive -t tar - | tar tf - 2>/dev/null | sed "s/$QTIP/TIP/"
+ test-TIP/.hg_archival.txt
+ test-TIP/bar
+ test-TIP/baz/bletch
+ test-TIP/foo
+
+ $ hg archive -r 0 -t tar rev-%r.tar
+ $ if [ -f rev-0.tar ]; then
+ $ fi
+
+test .hg_archival.txt
+
+ $ hg archive ../test-tags
+ $ cat ../test-tags/.hg_archival.txt
+ repo: daa7f7c60e0a224faa4ff77ca41b2760562af264
+ node: 2c0277f05ed49d1c8328fb9ba92fba7a5ebcb33e
+ branch: default
+ latesttag: null
+ latesttagdistance: 3
+ $ hg tag -r 2 mytag
+ $ hg tag -r 2 anothertag
+ $ hg archive -r 2 ../test-lasttag
+ $ cat ../test-lasttag/.hg_archival.txt
+ repo: daa7f7c60e0a224faa4ff77ca41b2760562af264
+ node: 2c0277f05ed49d1c8328fb9ba92fba7a5ebcb33e
+ branch: default
+ tag: anothertag
+ tag: mytag
+
+ $ hg archive -t bogus test.bogus
+ abort: unknown archive type 'bogus'
+
+server errors
+
+ $ cat errors.log
+
+empty repo
+
+ $ hg init ../empty
+ $ cd ../empty
+ $ hg archive ../test-empty
+ abort: no working directory: please specify a revision
+
+ $ exit 0