File: test-archive

package info (click to toggle)
mercurial 1.6.4-1%2Bdeb6u1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze-lts
  • size: 17,928 kB
  • ctags: 6,062
  • sloc: python: 44,238; sh: 20,985; tcl: 3,578; ansic: 2,557; lisp: 1,412; makefile: 176; xml: 15
file content (150 lines) | stat: -rwxr-xr-x 3,974 bytes parent folder | download | duplicates (2)
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
#!/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
python getarchive.py "$TIP" gz | gunzip | tar tf - 2>/dev/null | sed "s/$QTIP/TIP/"
python getarchive.py "$TIP" bz2 | bunzip2 | tar tf - 2>/dev/null | sed "s/$QTIP/TIP/"
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/"

hg archive autodetected_test.tar
tar tf autodetected_test.tar

# The '-t' should override autodetection
hg archive -t tar autodetect_override_test.zip
tar tf autodetect_override_test.zip

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

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

echo '% test .hg_archival.txt'
hg archive ../test-tags
cat ../test-tags/.hg_archival.txt
hg tag -r 2 mytag
hg tag -r 2 anothertag
hg archive -r 2 ../test-lasttag
cat ../test-lasttag/.hg_archival.txt

hg archive -t bogus test.bogus

echo % server errors
cat errors.log

echo '% empty repo'
hg init ../empty
cd ../empty
hg archive ../test-empty

echo '% old file -- date clamped to 1980'
touch -t 197501010000 old
hg add old
hg commit -m old
hg archive ../old.zip
unzip -l ../old.zip | grep 80 > /dev/null && echo ok

exit 0