test-archive.t
626 lines
| 19.4 KiB
| text/troff
|
Tads3Lexer
/ tests / test-archive.t
|
r22046 | #require serve | ||
|
r15446 | |||
|
r13956 | $ hg init test | ||
|
r11853 | $ cd test | ||
$ 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 | ||||
|
r23231 | $ hg init subrepo | ||
$ touch subrepo/sub | ||||
$ hg -q -R subrepo ci -Am "init subrepo" | ||||
$ echo "subrepo = subrepo" > .hgsub | ||||
$ hg add .hgsub | ||||
$ hg ci -m "add subrepo" | ||||
|
r34816 | |||
$ cat >> $HGRCPATH <<EOF | ||||
> [extensions] | ||||
> share = | ||||
> EOF | ||||
hg subrepos are shared when the parent repo is shared | ||||
$ cd .. | ||||
$ hg share test shared1 | ||||
updating working directory | ||||
sharing subrepo subrepo from $TESTTMP/test/subrepo | ||||
5 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cat shared1/subrepo/.hg/sharedpath | ||||
|
r35394 | $TESTTMP/test/subrepo/.hg (no-eol) | ||
|
r34816 | |||
hg subrepos are shared into existence on demand if the parent was shared | ||||
$ hg clone -qr 1 test clone1 | ||||
$ hg share clone1 share2 | ||||
updating working directory | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg -R clone1 -q pull | ||||
$ hg -R share2 update tip | ||||
sharing subrepo subrepo from $TESTTMP/test/subrepo | ||||
3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cat share2/subrepo/.hg/sharedpath | ||||
|
r35394 | $TESTTMP/test/subrepo/.hg (no-eol) | ||
|
r34816 | $ echo 'mod' > share2/subrepo/sub | ||
$ hg -R share2 ci -Sqm 'subrepo mod' | ||||
$ hg -R clone1 update -C tip | ||||
cloning subrepo subrepo from $TESTTMP/test/subrepo | ||||
3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
|
r34880 | $ find share2 | egrep 'sharedpath|00.+\.i' | sort | ||
share2/.hg/sharedpath | ||||
share2/subrepo/.hg/sharedpath | ||||
$ hg -R share2 unshare | ||||
unsharing subrepo 'subrepo' | ||||
$ find share2 | egrep 'sharedpath|00.+\.i' | sort | ||||
share2/.hg/00changelog.i | ||||
share2/.hg/sharedpath.old | ||||
share2/.hg/store/00changelog.i | ||||
share2/.hg/store/00manifest.i | ||||
share2/subrepo/.hg/00changelog.i | ||||
share2/subrepo/.hg/sharedpath.old | ||||
share2/subrepo/.hg/store/00changelog.i | ||||
share2/subrepo/.hg/store/00manifest.i | ||||
$ hg -R share2/subrepo log -r tip -T compact | ||||
1[tip] 559dcc9bfa65 1970-01-01 00:00 +0000 test | ||||
subrepo mod | ||||
|
r34816 | $ rm -rf clone1 | ||
$ hg clone -qr 1 test clone1 | ||||
$ hg share clone1 shared3 | ||||
updating working directory | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg -R clone1 -q pull | ||||
$ hg -R shared3 archive --config ui.archivemeta=False -r tip -S archive | ||||
sharing subrepo subrepo from $TESTTMP/test/subrepo | ||||
$ cat shared3/subrepo/.hg/sharedpath | ||||
|
r35394 | $TESTTMP/test/subrepo/.hg (no-eol) | ||
|
r34816 | $ diff -r archive test | ||
Only in test: .hg | ||||
|
r34900 | Common subdirectories: archive/baz and test/baz (?) | ||
Common subdirectories: archive/subrepo and test/subrepo (?) | ||||
|
r34816 | Only in test/subrepo: .hg | ||
[1] | ||||
$ rm -rf archive | ||||
$ cd test | ||||
|
r11853 | $ echo "[web]" >> .hg/hgrc | ||
$ echo "name = test-archive" >> .hg/hgrc | ||||
|
r23232 | $ echo "archivesubrepos = True" >> .hg/hgrc | ||
|
r11853 | $ cp .hg/hgrc .hg/hgrc-base | ||
> test_archtype() { | ||||
|
r38215 | > echo "allow-archive = $1" >> .hg/hgrc | ||
|
r34655 | > test_archtype_run "$@" | ||
> } | ||||
> test_archtype_deprecated() { | ||||
> echo "allow$1 = True" >> .hg/hgrc | ||||
> test_archtype_run "$@" | ||||
> } | ||||
> test_archtype_run() { | ||||
> hg serve -p $HGPORT -d --pid-file=hg.pid -E errors.log \ | ||||
> --config extensions.blackbox= --config blackbox.track=develwarn | ||||
|
r11853 | > cat hg.pid >> $DAEMON_PIDS | ||
> echo % $1 allowed should give 200 | ||||
|
r36890 | > get-with-headers.py --bodyfile body localhost:$HGPORT "archive/tip.$2" - | ||
> f --size --sha1 body | ||||
|
r11853 | > echo % $3 and $4 disallowed should both give 403 | ||
|
r36890 | > get-with-headers.py --bodyfile body localhost:$HGPORT "archive/tip.$3" - | ||
> f --size --sha1 body | ||||
> get-with-headers.py --bodyfile body localhost:$HGPORT "archive/tip.$4" - | ||||
> f --size --sha1 body | ||||
|
r25474 | > killdaemons.py | ||
|
r11853 | > cat errors.log | ||
|
r34655 | > hg blackbox --config extensions.blackbox= --config blackbox.track= | ||
|
r11853 | > 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 | ||||
|
r36890 | content-disposition: attachment; filename=test-archive-1701ef1f1510.tar.gz | ||
content-type: application/x-gzip | ||||
|
r37026 | date: $HTTP_DATE$ | ||
|
r36890 | etag: W/"*" (glob) | ||
|
r37027 | server: testing stub value | ||
|
r36890 | transfer-encoding: chunked | ||
|
r43341 | body: size=408, sha1=8fa06531bddecc365a9f5edb0f88b65974bfe505 (no-py38 !) | ||
|
r43377 | body: size=506, sha1=70926a04cb8887d0bcccf5380488100a10222def (py38 !) | ||
|
r11853 | % tar.bz2 and zip disallowed should both give 403 | ||
403 Archive type not allowed: bz2 | ||||
|
r36890 | content-type: text/html; charset=ascii | ||
|
r37026 | date: $HTTP_DATE$ | ||
|
r36890 | etag: W/"*" (glob) | ||
|
r37027 | server: testing stub value | ||
|
r36890 | transfer-encoding: chunked | ||
body: size=1451, sha1=4c5cf0f574446c44feb7f88f4e0e2a56bd92c352 | ||||
|
r11853 | 403 Archive type not allowed: zip | ||
|
r36890 | content-type: text/html; charset=ascii | ||
|
r37026 | date: $HTTP_DATE$ | ||
|
r36890 | etag: W/"*" (glob) | ||
|
r37027 | server: testing stub value | ||
|
r36890 | transfer-encoding: chunked | ||
body: size=1451, sha1=cbfa5574b337348bfd0564cc534474d002e7d6c7 | ||||
|
r11853 | $ test_archtype bz2 tar.bz2 zip tar.gz | ||
% bz2 allowed should give 200 | ||||
200 Script output follows | ||||
|
r36890 | content-disposition: attachment; filename=test-archive-1701ef1f1510.tar.bz2 | ||
content-type: application/x-bzip2 | ||||
|
r37026 | date: $HTTP_DATE$ | ||
|
r36890 | etag: W/"*" (glob) | ||
|
r37027 | server: testing stub value | ||
|
r36890 | transfer-encoding: chunked | ||
|
r43341 | body: size=426, sha1=8d87f5aba6e14f1bfea6c232985982c278b2fb0b (no-py38 !) | ||
body: size=506, sha1=1bd1f8e8d3701704bd4385038bd9c09b81c77f4e (py38 !) | ||||
|
r11853 | % zip and tar.gz disallowed should both give 403 | ||
403 Archive type not allowed: zip | ||||
|
r36890 | content-type: text/html; charset=ascii | ||
|
r37026 | date: $HTTP_DATE$ | ||
|
r36890 | etag: W/"*" (glob) | ||
|
r37027 | server: testing stub value | ||
|
r36890 | transfer-encoding: chunked | ||
body: size=1451, sha1=cbfa5574b337348bfd0564cc534474d002e7d6c7 | ||||
|
r11853 | 403 Archive type not allowed: gz | ||
|
r36890 | content-type: text/html; charset=ascii | ||
|
r37026 | date: $HTTP_DATE$ | ||
|
r36890 | etag: W/"*" (glob) | ||
|
r37027 | server: testing stub value | ||
|
r36890 | transfer-encoding: chunked | ||
body: size=1450, sha1=71f0b12d59f85fdcfe8ff493e2dc66863f2f7734 | ||||
|
r11853 | $ test_archtype zip zip tar.gz tar.bz2 | ||
% zip allowed should give 200 | ||||
200 Script output follows | ||||
|
r36890 | content-disposition: attachment; filename=test-archive-1701ef1f1510.zip | ||
content-type: application/zip | ||||
|
r37026 | date: $HTTP_DATE$ | ||
|
r36890 | etag: W/"*" (glob) | ||
|
r37027 | server: testing stub value | ||
|
r36890 | transfer-encoding: chunked | ||
|
r41346 | body: size=(1377|1461|1489), sha1=(677b14d3d048778d5eb5552c14a67e6192068650|be6d3983aa13dfe930361b2569291cdedd02b537|1897e496871aa89ad685a92b936f5fa0d008b9e8) (re) | ||
|
r11853 | % tar.gz and tar.bz2 disallowed should both give 403 | ||
403 Archive type not allowed: gz | ||||
|
r36890 | content-type: text/html; charset=ascii | ||
|
r37026 | date: $HTTP_DATE$ | ||
|
r36890 | etag: W/"*" (glob) | ||
|
r37027 | server: testing stub value | ||
|
r36890 | transfer-encoding: chunked | ||
body: size=1450, sha1=71f0b12d59f85fdcfe8ff493e2dc66863f2f7734 | ||||
|
r11853 | 403 Archive type not allowed: bz2 | ||
|
r36890 | content-type: text/html; charset=ascii | ||
|
r37026 | date: $HTTP_DATE$ | ||
|
r36890 | etag: W/"*" (glob) | ||
|
r37027 | server: testing stub value | ||
|
r36890 | transfer-encoding: chunked | ||
body: size=1451, sha1=4c5cf0f574446c44feb7f88f4e0e2a56bd92c352 | ||||
|
r11853 | |||
|
r34655 | check http return codes (with deprecated option) | ||
$ test_archtype_deprecated gz tar.gz tar.bz2 zip | ||||
% gz allowed should give 200 | ||||
200 Script output follows | ||||
|
r36890 | content-disposition: attachment; filename=test-archive-1701ef1f1510.tar.gz | ||
content-type: application/x-gzip | ||||
|
r37026 | date: $HTTP_DATE$ | ||
|
r36890 | etag: W/"*" (glob) | ||
|
r37027 | server: testing stub value | ||
|
r36890 | transfer-encoding: chunked | ||
|
r43341 | body: size=408, sha1=8fa06531bddecc365a9f5edb0f88b65974bfe505 (no-py38 !) | ||
body: size=506, sha1=70926a04cb8887d0bcccf5380488100a10222def (py38 !) | ||||
|
r34655 | % tar.bz2 and zip disallowed should both give 403 | ||
403 Archive type not allowed: bz2 | ||||
|
r36890 | content-type: text/html; charset=ascii | ||
|
r37026 | date: $HTTP_DATE$ | ||
|
r36890 | etag: W/"*" (glob) | ||
|
r37027 | server: testing stub value | ||
|
r36890 | transfer-encoding: chunked | ||
body: size=1451, sha1=4c5cf0f574446c44feb7f88f4e0e2a56bd92c352 | ||||
|
r34655 | 403 Archive type not allowed: zip | ||
|
r36890 | content-type: text/html; charset=ascii | ||
|
r37026 | date: $HTTP_DATE$ | ||
|
r36890 | etag: W/"*" (glob) | ||
|
r37027 | server: testing stub value | ||
|
r36890 | transfer-encoding: chunked | ||
body: size=1451, sha1=cbfa5574b337348bfd0564cc534474d002e7d6c7 | ||||
|
r34655 | $ test_archtype_deprecated bz2 tar.bz2 zip tar.gz | ||
% bz2 allowed should give 200 | ||||
200 Script output follows | ||||
|
r36890 | content-disposition: attachment; filename=test-archive-1701ef1f1510.tar.bz2 | ||
content-type: application/x-bzip2 | ||||
|
r37026 | date: $HTTP_DATE$ | ||
|
r36890 | etag: W/"*" (glob) | ||
|
r37027 | server: testing stub value | ||
|
r36890 | transfer-encoding: chunked | ||
|
r43341 | body: size=426, sha1=8d87f5aba6e14f1bfea6c232985982c278b2fb0b (no-py38 !) | ||
body: size=506, sha1=1bd1f8e8d3701704bd4385038bd9c09b81c77f4e (py38 !) | ||||
|
r34655 | % zip and tar.gz disallowed should both give 403 | ||
403 Archive type not allowed: zip | ||||
|
r36890 | content-type: text/html; charset=ascii | ||
|
r37026 | date: $HTTP_DATE$ | ||
|
r36890 | etag: W/"*" (glob) | ||
|
r37027 | server: testing stub value | ||
|
r36890 | transfer-encoding: chunked | ||
body: size=1451, sha1=cbfa5574b337348bfd0564cc534474d002e7d6c7 | ||||
|
r34655 | 403 Archive type not allowed: gz | ||
|
r36890 | content-type: text/html; charset=ascii | ||
|
r37026 | date: $HTTP_DATE$ | ||
|
r36890 | etag: W/"*" (glob) | ||
|
r37027 | server: testing stub value | ||
|
r36890 | transfer-encoding: chunked | ||
body: size=1450, sha1=71f0b12d59f85fdcfe8ff493e2dc66863f2f7734 | ||||
|
r34655 | $ test_archtype_deprecated zip zip tar.gz tar.bz2 | ||
% zip allowed should give 200 | ||||
200 Script output follows | ||||
|
r36890 | content-disposition: attachment; filename=test-archive-1701ef1f1510.zip | ||
content-type: application/zip | ||||
|
r37026 | date: $HTTP_DATE$ | ||
|
r36890 | etag: W/"*" (glob) | ||
|
r37027 | server: testing stub value | ||
|
r36890 | transfer-encoding: chunked | ||
|
r41346 | body: size=(1377|1461|1489), sha1=(677b14d3d048778d5eb5552c14a67e6192068650|be6d3983aa13dfe930361b2569291cdedd02b537|1897e496871aa89ad685a92b936f5fa0d008b9e8) (re) | ||
|
r34655 | % tar.gz and tar.bz2 disallowed should both give 403 | ||
403 Archive type not allowed: gz | ||||
|
r36890 | content-type: text/html; charset=ascii | ||
|
r37026 | date: $HTTP_DATE$ | ||
|
r36890 | etag: W/"*" (glob) | ||
|
r37027 | server: testing stub value | ||
|
r36890 | transfer-encoding: chunked | ||
body: size=1450, sha1=71f0b12d59f85fdcfe8ff493e2dc66863f2f7734 | ||||
|
r34655 | 403 Archive type not allowed: bz2 | ||
|
r36890 | content-type: text/html; charset=ascii | ||
|
r37026 | date: $HTTP_DATE$ | ||
|
r36890 | etag: W/"*" (glob) | ||
|
r37027 | server: testing stub value | ||
|
r36890 | transfer-encoding: chunked | ||
body: size=1451, sha1=4c5cf0f574446c44feb7f88f4e0e2a56bd92c352 | ||||
|
r34655 | |||
|
r38215 | $ echo "allow-archive = gz bz2 zip" >> .hg/hgrc | ||
|
r11853 | $ hg serve -p $HGPORT -d --pid-file=hg.pid -E errors.log | ||
$ cat hg.pid >> $DAEMON_PIDS | ||||
r30747 | check archive links' order | |||
$ get-with-headers.py localhost:$HGPORT "?revcount=1" | grep '/archive/tip.' | ||||
<a href="/archive/tip.zip">zip</a> | ||||
<a href="/archive/tip.tar.gz">gz</a> | ||||
<a href="/archive/tip.tar.bz2">bz2</a> | ||||
|
r11853 | invalid arch type should give 404 | ||
|
r25472 | $ get-with-headers.py localhost:$HGPORT "archive/tip.invalid" | head -n 1 | ||
|
r11853 | 404 Unsupported archive type: None | ||
$ TIP=`hg id -v | cut -f1 -d' '` | ||||
$ QTIP=`hg id -q` | ||||
$ cat > getarchive.py <<EOF | ||||
|
r29179 | > from __future__ import absolute_import | ||
> import os | ||||
> import sys | ||||
|
r29183 | > from mercurial import ( | ||
> util, | ||||
> ) | ||||
|
r11853 | > try: | ||
> # Set stdout to binary mode for win32 platforms | ||||
> import msvcrt | ||||
> msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) | ||||
> except ImportError: | ||||
> pass | ||||
|
r18770 | > if len(sys.argv) <= 3: | ||
> node, archive = sys.argv[1:] | ||||
> requeststr = 'cmd=archive;node=%s;type=%s' % (node, archive) | ||||
> else: | ||||
> node, archive, file = sys.argv[1:] | ||||
> requeststr = 'cmd=archive;node=%s;type=%s;file=%s' % (node, archive, file) | ||||
> try: | ||||
|
r29182 | > stdout = sys.stdout.buffer | ||
> except AttributeError: | ||||
> stdout = sys.stdout | ||||
> try: | ||||
|
r31008 | > f = util.urlreq.urlopen('http://$LOCALIP:%s/?%s' | ||
|
r18770 | > % (os.environ['HGPORT'], requeststr)) | ||
|
r29182 | > stdout.write(f.read()) | ||
|
r29183 | > except util.urlerr.httperror as e: | ||
|
r18770 | > sys.stderr.write(str(e) + '\n') | ||
|
r11853 | > EOF | ||
|
r39743 | $ "$PYTHON" getarchive.py "$TIP" gz | gunzip | tar tf - 2>/dev/null | ||
|
r23231 | test-archive-1701ef1f1510/.hg_archival.txt | ||
test-archive-1701ef1f1510/.hgsub | ||||
test-archive-1701ef1f1510/.hgsubstate | ||||
test-archive-1701ef1f1510/bar | ||||
test-archive-1701ef1f1510/baz/bletch | ||||
test-archive-1701ef1f1510/foo | ||||
|
r23232 | test-archive-1701ef1f1510/subrepo/sub | ||
|
r39743 | $ "$PYTHON" getarchive.py "$TIP" bz2 | bunzip2 | tar tf - 2>/dev/null | ||
|
r23231 | test-archive-1701ef1f1510/.hg_archival.txt | ||
test-archive-1701ef1f1510/.hgsub | ||||
test-archive-1701ef1f1510/.hgsubstate | ||||
test-archive-1701ef1f1510/bar | ||||
test-archive-1701ef1f1510/baz/bletch | ||||
test-archive-1701ef1f1510/foo | ||||
|
r23232 | test-archive-1701ef1f1510/subrepo/sub | ||
|
r39743 | $ "$PYTHON" getarchive.py "$TIP" zip > archive.zip | ||
|
r12366 | $ unzip -t archive.zip | ||
|
r11853 | Archive: archive.zip | ||
|
r29562 | testing: test-archive-1701ef1f1510/.hg_archival.txt*OK (glob) | ||
testing: test-archive-1701ef1f1510/.hgsub*OK (glob) | ||||
testing: test-archive-1701ef1f1510/.hgsubstate*OK (glob) | ||||
testing: test-archive-1701ef1f1510/bar*OK (glob) | ||||
testing: test-archive-1701ef1f1510/baz/bletch*OK (glob) | ||||
testing: test-archive-1701ef1f1510/foo*OK (glob) | ||||
testing: test-archive-1701ef1f1510/subrepo/sub*OK (glob) | ||||
|
r11853 | No errors detected in compressed data of archive.zip. | ||
|
r18771 | test that we can download single directories and files | ||
|
r39743 | $ "$PYTHON" getarchive.py "$TIP" gz baz | gunzip | tar tf - 2>/dev/null | ||
|
r23231 | test-archive-1701ef1f1510/baz/bletch | ||
|
r39743 | $ "$PYTHON" getarchive.py "$TIP" gz foo | gunzip | tar tf - 2>/dev/null | ||
|
r23231 | test-archive-1701ef1f1510/foo | ||
|
r18771 | |||
|
r18968 | test that we detect file patterns that match no files | ||
|
r39743 | $ "$PYTHON" getarchive.py "$TIP" gz foobar | ||
|
r18968 | HTTP Error 404: file(s) not found: foobar | ||
|
r18771 | test that we reject unsafe patterns | ||
|
r39743 | $ "$PYTHON" getarchive.py "$TIP" gz relre:baz | ||
|
r18968 | HTTP Error 404: file(s) not found: relre:baz | ||
|
r18771 | |||
|
r25474 | $ killdaemons.py | ||
|
r11853 | |||
$ hg archive -t tar test.tar | ||||
$ tar tf test.tar | ||||
test/.hg_archival.txt | ||||
|
r23231 | test/.hgsub | ||
test/.hgsubstate | ||||
|
r11853 | test/bar | ||
test/baz/bletch | ||||
test/foo | ||||
|
r25125 | $ hg archive --debug -t tbz2 -X baz test.tar.bz2 --config progress.debug=true | ||
|
r23231 | archiving: 0/4 files (0.00%) | ||
archiving: .hgsub 1/4 files (25.00%) | ||||
archiving: .hgsubstate 2/4 files (50.00%) | ||||
archiving: bar 3/4 files (75.00%) | ||||
archiving: foo 4/4 files (100.00%) | ||||
|
r11853 | $ bunzip2 -dc test.tar.bz2 | tar tf - 2>/dev/null | ||
test/.hg_archival.txt | ||||
|
r23231 | test/.hgsub | ||
test/.hgsubstate | ||||
|
r11853 | test/bar | ||
test/foo | ||||
$ hg archive -t tgz -p %b-%h test-%h.tar.gz | ||||
|
r12366 | $ gzip -dc test-$QTIP.tar.gz | tar tf - 2>/dev/null | ||
|
r23231 | test-1701ef1f1510/.hg_archival.txt | ||
test-1701ef1f1510/.hgsub | ||||
test-1701ef1f1510/.hgsubstate | ||||
test-1701ef1f1510/bar | ||||
test-1701ef1f1510/baz/bletch | ||||
test-1701ef1f1510/foo | ||||
|
r11853 | |||
$ hg archive autodetected_test.tar | ||||
$ tar tf autodetected_test.tar | ||||
autodetected_test/.hg_archival.txt | ||||
|
r23231 | autodetected_test/.hgsub | ||
autodetected_test/.hgsubstate | ||||
|
r11853 | 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 | ||||
|
r23231 | autodetect_override_test.zip/.hgsub | ||
autodetect_override_test.zip/.hgsubstate | ||||
|
r11853 | 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 | ||||
|
r33876 | > from __future__ import absolute_import, print_function | ||
> import hashlib | ||||
|
r11853 | > import sys | ||
> f1, f2 = sys.argv[1:3] | ||||
|
r33876 | > h1 = hashlib.md5(open(f1, 'rb').read()).hexdigest() | ||
> h2 = hashlib.md5(open(f2, 'rb').read()).hexdigest() | ||||
|
r29177 | > print(h1 == h2 or "md5 differ: " + repr((h1, h2))) | ||
|
r11853 | > EOF | ||
|
r13140 | archive name is stored in the archive, so create similar archives and | ||
rename them afterwards. | ||||
|
r11853 | |||
$ 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 | ||||
|
r39743 | $ "$PYTHON" md5comp.py tip1.tar.gz tip2.tar.gz | ||
|
r11853 | True | ||
$ hg archive -t zip -p /illegal test.zip | ||||
abort: archive prefix contains illegal components | ||||
|
r12316 | [255] | ||
|
r11853 | $ 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 | ||||
|
r29562 | testing: test/bar*OK (glob) | ||
testing: test/baz/bletch*OK (glob) | ||||
testing: test/foo*OK (glob) | ||||
|
r11853 | No errors detected in compressed data of test.zip. | ||
|
r12366 | $ hg archive -t tar - | tar tf - 2>/dev/null | ||
|
r23231 | test-1701ef1f1510/.hg_archival.txt | ||
test-1701ef1f1510/.hgsub | ||||
test-1701ef1f1510/.hgsubstate | ||||
test-1701ef1f1510/bar | ||||
test-1701ef1f1510/baz/bletch | ||||
test-1701ef1f1510/foo | ||||
|
r11853 | |||
$ hg archive -r 0 -t tar rev-%r.tar | ||||
|
r19870 | $ [ -f rev-0.tar ] | ||
|
r11853 | |||
test .hg_archival.txt | ||||
$ hg archive ../test-tags | ||||
$ cat ../test-tags/.hg_archival.txt | ||||
repo: daa7f7c60e0a224faa4ff77ca41b2760562af264 | ||||
|
r23231 | node: 1701ef1f151069b8747038e93b5186bb43a47504 | ||
|
r11853 | branch: default | ||
latesttag: null | ||||
|
r23231 | latesttagdistance: 4 | ||
|
r23645 | changessincelatesttag: 4 | ||
|
r11853 | $ 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' | ||||
|
r12316 | [255] | ||
|
r11853 | |||
|
r13143 | enable progress extension: | ||
$ cp $HGRCPATH $HGRCPATH.no-progress | ||||
$ cat >> $HGRCPATH <<EOF | ||||
> [progress] | ||||
> assume-tty = 1 | ||||
|
r13149 | > format = topic bar number | ||
|
r13143 | > delay = 0 | ||
> refresh = 0 | ||||
> width = 60 | ||||
> EOF | ||||
|
r17743 | $ hg archive ../with-progress | ||
\r (no-eol) (esc) | ||||
|
r23231 | archiving [ ] 0/6\r (no-eol) (esc) | ||
archiving [======> ] 1/6\r (no-eol) (esc) | ||||
archiving [=============> ] 2/6\r (no-eol) (esc) | ||||
archiving [====================> ] 3/6\r (no-eol) (esc) | ||||
archiving [===========================> ] 4/6\r (no-eol) (esc) | ||||
archiving [==================================> ] 5/6\r (no-eol) (esc) | ||||
archiving [==========================================>] 6/6\r (no-eol) (esc) | ||||
|
r17743 | \r (no-eol) (esc) | ||
|
r13143 | |||
cleanup after progress extension test: | ||||
$ cp $HGRCPATH.no-progress $HGRCPATH | ||||
|
r11853 | server errors | ||
$ cat errors.log | ||||
empty repo | ||||
$ hg init ../empty | ||||
$ cd ../empty | ||||
$ hg archive ../test-empty | ||||
abort: no working directory: please specify a revision | ||||
|
r12316 | [255] | ||
|
r13140 | |||
|
r12321 | old file -- date clamped to 1980 | ||
|
r12368 | $ touch -t 197501010000 old | ||
|
r12321 | $ hg add old | ||
$ hg commit -m old | ||||
$ hg archive ../old.zip | ||||
|
r30844 | $ unzip -l ../old.zip | grep -v -- ----- | egrep -v files$ | ||
|
r12321 | Archive: ../old.zip | ||
|
r12375 | \s*Length.* (re) | ||
|
r23645 | *172*80*00:00*old/.hg_archival.txt (glob) | ||
|
r12376 | *0*80*00:00*old/old (glob) | ||
|
r16913 | |||
|
r43210 | test xz support only available in Python 3.4 | ||
#if py3 | ||||
$ hg archive ../archive.txz | ||||
$ xz -l ../archive.txz | head -n1 | ||||
Strms Blocks Compressed Uncompressed Ratio Check Filename | ||||
$ rm -f ../archive.txz | ||||
#else | ||||
$ hg archive ../archive.txz | ||||
abort: xz compression is only available in Python 3 | ||||
[255] | ||||
#endif | ||||
|
r18967 | show an error when a provided pattern matches no files | ||
$ hg archive -I file_that_does_not_exist.foo ../empty.zip | ||||
abort: no files match the archive pattern | ||||
[255] | ||||
$ hg archive -X * ../empty.zip | ||||
abort: no files match the archive pattern | ||||
[255] | ||||
|
r16913 | $ cd .. | ||
|
r17628 | |||
issue3600: check whether "hg archive" can create archive files which | ||||
are extracted with expected timestamp, even though TZ is not | ||||
configured as GMT. | ||||
$ mkdir issue3600 | ||||
$ cd issue3600 | ||||
$ hg init repo | ||||
$ echo a > repo/a | ||||
$ hg -R repo add repo/a | ||||
$ hg -R repo commit -m '#0' -d '456789012 21600' | ||||
$ cat > show_mtime.py <<EOF | ||||
|
r33946 | > from __future__ import absolute_import, print_function | ||
> import os | ||||
> import sys | ||||
|
r29177 | > print(int(os.stat(sys.argv[1]).st_mtime)) | ||
|
r17628 | > EOF | ||
$ hg -R repo archive --prefix tar-extracted archive.tar | ||||
$ (TZ=UTC-3; export TZ; tar xf archive.tar) | ||||
|
r39743 | $ "$PYTHON" show_mtime.py tar-extracted/a | ||
|
r17628 | 456789012 | ||
$ hg -R repo archive --prefix zip-extracted archive.zip | ||||
$ (TZ=UTC-3; export TZ; unzip -q archive.zip) | ||||
|
r39743 | $ "$PYTHON" show_mtime.py zip-extracted/a | ||
|
r17628 | 456789012 | ||
$ cd .. | ||||