##// END OF EJS Templates
wireprotov2: define and implement "manifestdata" command...
wireprotov2: define and implement "manifestdata" command The added command can be used for obtaining manifest data. Given a manifest path and set of manifest nodes, data about manifests can be retrieved. Unlike changeset data, we wish to emit deltas to describe manifest revisions. So the command uses the relatively new API for building delta requests and emitting them. The code calls into deltaparent(), which I'm not very keen of. There's still work to be done in delta generation land so implementation details of storage (e.g. exactly one delta is stored/available) don't creep into higher levels. But we can worry about this later (there is already a TODO on imanifestorage tracking this). On the subject of parent deltas, the server assumes parent revisions exist on the receiving end. This is obviously wrong for shallow clone. I've added TODOs to add a mechanism to the command to allow clients to specify desired behavior. This shouldn't be too difficult to implement. Another big change is that the client must explicitly request manifest nodes to retrieve. This is a major departure from "getbundle," where the server derives relevant manifests as it iterates changesets and sends them automatically. As implemented, the client must transmit each requested node to the server. At 20 bytes per node, we're looking at 2 MB per 100,000 nodes. Plus wire encoding overhead. This isn't ideal for clients with limited upload bandwidth. I plan to address this in the future by allowing alternate mechanisms for defining the revisions to retrieve. One idea is to define a range of changeset revisions whose manifest revisions to retrieve (similar to how "changesetdata" works). We almost certainly want an API to look up an individual manifest by node. And that's where I've chosen to start with the implementation. Again, a theme of this early exchangev2 work is I want to start by building primitives for accessing raw repository data first and see how far we can get with those before we need more complexity. Differential Revision: https://phab.mercurial-scm.org/D4488

File last commit:

r38215:f715faea default
r39673:c7a7c7e8 default
Show More
test-archive.t
609 lines | 18.5 KiB | text/troff | Tads3Lexer
Matt Mackall
tests: replace exit 80 with #require
r22046 #require serve
Mads Kiilerich
tests: use 'hghave serve' to guard tests that requires serve daemon management
r15446
Martin Geisler
tests: remove redundant mkdir...
r13956 $ hg init test
Martin Geisler
tests: unify test-archive
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
Matt Harbison
tests: introduce a subrepository to test-archive.t...
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"
Matt Harbison
subrepo: share instead of clone if the parent repo is shared (issue5675) (BC)...
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
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 $TESTTMP/test/subrepo/.hg (no-eol)
Matt Harbison
subrepo: share instead of clone if the parent repo is shared (issue5675) (BC)...
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
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 $TESTTMP/test/subrepo/.hg (no-eol)
Matt Harbison
subrepo: share instead of clone if the parent repo is shared (issue5675) (BC)...
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
Matt Harbison
subrepo: implement 'unshare' for Mercurial subrepos...
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
Matt Harbison
subrepo: share instead of clone if the parent repo is shared (issue5675) (BC)...
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
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 $TESTTMP/test/subrepo/.hg (no-eol)
Matt Harbison
subrepo: share instead of clone if the parent repo is shared (issue5675) (BC)...
r34816 $ diff -r archive test
Only in test: .hg
Augie Fackler
tests: add some (?) output lines to catch "helpful" output from Solaris diff...
r34900 Common subdirectories: archive/baz and test/baz (?)
Common subdirectories: archive/subrepo and test/subrepo (?)
Matt Harbison
subrepo: share instead of clone if the parent repo is shared (issue5675) (BC)...
r34816 Only in test/subrepo: .hg
[1]
$ rm -rf archive
$ cd test
Martin Geisler
tests: unify test-archive
r11853 $ echo "[web]" >> .hg/hgrc
$ echo "name = test-archive" >> .hg/hgrc
Matt Harbison
hgweb: fix a crash when using web.archivesubrepos...
r23232 $ echo "archivesubrepos = True" >> .hg/hgrc
Martin Geisler
tests: unify test-archive
r11853 $ cp .hg/hgrc .hg/hgrc-base
> test_archtype() {
David Demelier
config: rename allow_archive to allow-archive...
r38215 > echo "allow-archive = $1" >> .hg/hgrc
Yuya Nishihara
configitems: drop redundant default of web.allow<archtype>...
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
Martin Geisler
tests: unify test-archive
r11853 > cat hg.pid >> $DAEMON_PIDS
> echo % $1 allowed should give 200
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 > get-with-headers.py --bodyfile body localhost:$HGPORT "archive/tip.$2" -
> f --size --sha1 body
Martin Geisler
tests: unify test-archive
r11853 > echo % $3 and $4 disallowed should both give 403
Gregory Szorc
tests: additional test coverage of archive web command...
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
Matt Mackall
tests: drop DAEMON_PIDS from killdaemons calls
r25474 > killdaemons.py
Martin Geisler
tests: unify test-archive
r11853 > cat errors.log
Yuya Nishihara
configitems: drop redundant default of web.allow<archtype>...
r34655 > hg blackbox --config extensions.blackbox= --config blackbox.track=
Martin Geisler
tests: unify test-archive
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
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 content-disposition: attachment; filename=test-archive-1701ef1f1510.tar.gz
content-type: application/x-gzip
Gregory Szorc
tests: use $HTTP_DATE$ for Date header...
r37026 date: $HTTP_DATE$
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 etag: W/"*" (glob)
Gregory Szorc
hgweb: allow defining Server response header for HTTP server...
r37027 server: testing stub value
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 transfer-encoding: chunked
body: size=408, sha1=8fa06531bddecc365a9f5edb0f88b65974bfe505
Martin Geisler
tests: unify test-archive
r11853 % tar.bz2 and zip disallowed should both give 403
403 Archive type not allowed: bz2
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 content-type: text/html; charset=ascii
Gregory Szorc
tests: use $HTTP_DATE$ for Date header...
r37026 date: $HTTP_DATE$
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 etag: W/"*" (glob)
Gregory Szorc
hgweb: allow defining Server response header for HTTP server...
r37027 server: testing stub value
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 transfer-encoding: chunked
body: size=1451, sha1=4c5cf0f574446c44feb7f88f4e0e2a56bd92c352
Martin Geisler
tests: unify test-archive
r11853 403 Archive type not allowed: zip
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 content-type: text/html; charset=ascii
Gregory Szorc
tests: use $HTTP_DATE$ for Date header...
r37026 date: $HTTP_DATE$
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 etag: W/"*" (glob)
Gregory Szorc
hgweb: allow defining Server response header for HTTP server...
r37027 server: testing stub value
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 transfer-encoding: chunked
body: size=1451, sha1=cbfa5574b337348bfd0564cc534474d002e7d6c7
Martin Geisler
tests: unify test-archive
r11853 $ test_archtype bz2 tar.bz2 zip tar.gz
% bz2 allowed should give 200
200 Script output follows
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 content-disposition: attachment; filename=test-archive-1701ef1f1510.tar.bz2
content-type: application/x-bzip2
Gregory Szorc
tests: use $HTTP_DATE$ for Date header...
r37026 date: $HTTP_DATE$
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 etag: W/"*" (glob)
Gregory Szorc
hgweb: allow defining Server response header for HTTP server...
r37027 server: testing stub value
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 transfer-encoding: chunked
body: size=426, sha1=8d87f5aba6e14f1bfea6c232985982c278b2fb0b
Martin Geisler
tests: unify test-archive
r11853 % zip and tar.gz disallowed should both give 403
403 Archive type not allowed: zip
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 content-type: text/html; charset=ascii
Gregory Szorc
tests: use $HTTP_DATE$ for Date header...
r37026 date: $HTTP_DATE$
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 etag: W/"*" (glob)
Gregory Szorc
hgweb: allow defining Server response header for HTTP server...
r37027 server: testing stub value
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 transfer-encoding: chunked
body: size=1451, sha1=cbfa5574b337348bfd0564cc534474d002e7d6c7
Martin Geisler
tests: unify test-archive
r11853 403 Archive type not allowed: gz
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 content-type: text/html; charset=ascii
Gregory Szorc
tests: use $HTTP_DATE$ for Date header...
r37026 date: $HTTP_DATE$
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 etag: W/"*" (glob)
Gregory Szorc
hgweb: allow defining Server response header for HTTP server...
r37027 server: testing stub value
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 transfer-encoding: chunked
body: size=1450, sha1=71f0b12d59f85fdcfe8ff493e2dc66863f2f7734
Martin Geisler
tests: unify test-archive
r11853 $ test_archtype zip zip tar.gz tar.bz2
% zip allowed should give 200
200 Script output follows
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 content-disposition: attachment; filename=test-archive-1701ef1f1510.zip
content-type: application/zip
Gregory Szorc
tests: use $HTTP_DATE$ for Date header...
r37026 date: $HTTP_DATE$
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 etag: W/"*" (glob)
Gregory Szorc
hgweb: allow defining Server response header for HTTP server...
r37027 server: testing stub value
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 transfer-encoding: chunked
body: size=1377, sha1=677b14d3d048778d5eb5552c14a67e6192068650
Martin Geisler
tests: unify test-archive
r11853 % tar.gz and tar.bz2 disallowed should both give 403
403 Archive type not allowed: gz
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 content-type: text/html; charset=ascii
Gregory Szorc
tests: use $HTTP_DATE$ for Date header...
r37026 date: $HTTP_DATE$
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 etag: W/"*" (glob)
Gregory Szorc
hgweb: allow defining Server response header for HTTP server...
r37027 server: testing stub value
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 transfer-encoding: chunked
body: size=1450, sha1=71f0b12d59f85fdcfe8ff493e2dc66863f2f7734
Martin Geisler
tests: unify test-archive
r11853 403 Archive type not allowed: bz2
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 content-type: text/html; charset=ascii
Gregory Szorc
tests: use $HTTP_DATE$ for Date header...
r37026 date: $HTTP_DATE$
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 etag: W/"*" (glob)
Gregory Szorc
hgweb: allow defining Server response header for HTTP server...
r37027 server: testing stub value
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 transfer-encoding: chunked
body: size=1451, sha1=4c5cf0f574446c44feb7f88f4e0e2a56bd92c352
Martin Geisler
tests: unify test-archive
r11853
Yuya Nishihara
configitems: drop redundant default of web.allow<archtype>...
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
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 content-disposition: attachment; filename=test-archive-1701ef1f1510.tar.gz
content-type: application/x-gzip
Gregory Szorc
tests: use $HTTP_DATE$ for Date header...
r37026 date: $HTTP_DATE$
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 etag: W/"*" (glob)
Gregory Szorc
hgweb: allow defining Server response header for HTTP server...
r37027 server: testing stub value
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 transfer-encoding: chunked
body: size=408, sha1=8fa06531bddecc365a9f5edb0f88b65974bfe505
Yuya Nishihara
configitems: drop redundant default of web.allow<archtype>...
r34655 % tar.bz2 and zip disallowed should both give 403
403 Archive type not allowed: bz2
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 content-type: text/html; charset=ascii
Gregory Szorc
tests: use $HTTP_DATE$ for Date header...
r37026 date: $HTTP_DATE$
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 etag: W/"*" (glob)
Gregory Szorc
hgweb: allow defining Server response header for HTTP server...
r37027 server: testing stub value
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 transfer-encoding: chunked
body: size=1451, sha1=4c5cf0f574446c44feb7f88f4e0e2a56bd92c352
Yuya Nishihara
configitems: drop redundant default of web.allow<archtype>...
r34655 403 Archive type not allowed: zip
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 content-type: text/html; charset=ascii
Gregory Szorc
tests: use $HTTP_DATE$ for Date header...
r37026 date: $HTTP_DATE$
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 etag: W/"*" (glob)
Gregory Szorc
hgweb: allow defining Server response header for HTTP server...
r37027 server: testing stub value
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 transfer-encoding: chunked
body: size=1451, sha1=cbfa5574b337348bfd0564cc534474d002e7d6c7
Yuya Nishihara
configitems: drop redundant default of web.allow<archtype>...
r34655 $ test_archtype_deprecated bz2 tar.bz2 zip tar.gz
% bz2 allowed should give 200
200 Script output follows
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 content-disposition: attachment; filename=test-archive-1701ef1f1510.tar.bz2
content-type: application/x-bzip2
Gregory Szorc
tests: use $HTTP_DATE$ for Date header...
r37026 date: $HTTP_DATE$
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 etag: W/"*" (glob)
Gregory Szorc
hgweb: allow defining Server response header for HTTP server...
r37027 server: testing stub value
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 transfer-encoding: chunked
body: size=426, sha1=8d87f5aba6e14f1bfea6c232985982c278b2fb0b
Yuya Nishihara
configitems: drop redundant default of web.allow<archtype>...
r34655 % zip and tar.gz disallowed should both give 403
403 Archive type not allowed: zip
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 content-type: text/html; charset=ascii
Gregory Szorc
tests: use $HTTP_DATE$ for Date header...
r37026 date: $HTTP_DATE$
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 etag: W/"*" (glob)
Gregory Szorc
hgweb: allow defining Server response header for HTTP server...
r37027 server: testing stub value
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 transfer-encoding: chunked
body: size=1451, sha1=cbfa5574b337348bfd0564cc534474d002e7d6c7
Yuya Nishihara
configitems: drop redundant default of web.allow<archtype>...
r34655 403 Archive type not allowed: gz
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 content-type: text/html; charset=ascii
Gregory Szorc
tests: use $HTTP_DATE$ for Date header...
r37026 date: $HTTP_DATE$
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 etag: W/"*" (glob)
Gregory Szorc
hgweb: allow defining Server response header for HTTP server...
r37027 server: testing stub value
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 transfer-encoding: chunked
body: size=1450, sha1=71f0b12d59f85fdcfe8ff493e2dc66863f2f7734
Yuya Nishihara
configitems: drop redundant default of web.allow<archtype>...
r34655 $ test_archtype_deprecated zip zip tar.gz tar.bz2
% zip allowed should give 200
200 Script output follows
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 content-disposition: attachment; filename=test-archive-1701ef1f1510.zip
content-type: application/zip
Gregory Szorc
tests: use $HTTP_DATE$ for Date header...
r37026 date: $HTTP_DATE$
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 etag: W/"*" (glob)
Gregory Szorc
hgweb: allow defining Server response header for HTTP server...
r37027 server: testing stub value
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 transfer-encoding: chunked
body: size=1377, sha1=677b14d3d048778d5eb5552c14a67e6192068650
Yuya Nishihara
configitems: drop redundant default of web.allow<archtype>...
r34655 % tar.gz and tar.bz2 disallowed should both give 403
403 Archive type not allowed: gz
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 content-type: text/html; charset=ascii
Gregory Szorc
tests: use $HTTP_DATE$ for Date header...
r37026 date: $HTTP_DATE$
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 etag: W/"*" (glob)
Gregory Szorc
hgweb: allow defining Server response header for HTTP server...
r37027 server: testing stub value
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 transfer-encoding: chunked
body: size=1450, sha1=71f0b12d59f85fdcfe8ff493e2dc66863f2f7734
Yuya Nishihara
configitems: drop redundant default of web.allow<archtype>...
r34655 403 Archive type not allowed: bz2
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 content-type: text/html; charset=ascii
Gregory Szorc
tests: use $HTTP_DATE$ for Date header...
r37026 date: $HTTP_DATE$
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 etag: W/"*" (glob)
Gregory Szorc
hgweb: allow defining Server response header for HTTP server...
r37027 server: testing stub value
Gregory Szorc
tests: additional test coverage of archive web command...
r36890 transfer-encoding: chunked
body: size=1451, sha1=4c5cf0f574446c44feb7f88f4e0e2a56bd92c352
Yuya Nishihara
configitems: drop redundant default of web.allow<archtype>...
r34655
David Demelier
config: rename allow_archive to allow-archive...
r38215 $ echo "allow-archive = gz bz2 zip" >> .hg/hgrc
Martin Geisler
tests: unify test-archive
r11853 $ hg serve -p $HGPORT -d --pid-file=hg.pid -E errors.log
$ cat hg.pid >> $DAEMON_PIDS
av6
hgweb: test the order of archive links
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>
Martin Geisler
tests: unify test-archive
r11853 invalid arch type should give 404
Matt Mackall
tests: drop explicit $TESTDIR from executables...
r25472 $ get-with-headers.py localhost:$HGPORT "archive/tip.invalid" | head -n 1
Martin Geisler
tests: unify test-archive
r11853 404 Unsupported archive type: None
$ TIP=`hg id -v | cut -f1 -d' '`
$ QTIP=`hg id -q`
$ cat > getarchive.py <<EOF
timeless
tests: test-archive.t use absolute_import...
r29179 > from __future__ import absolute_import
> import os
> import sys
timeless
tests: test-archive.t use mercurial.util for urllib compat
r29183 > from mercurial import (
> util,
> )
Martin Geisler
tests: unify test-archive
r11853 > try:
> # Set stdout to binary mode for win32 platforms
> import msvcrt
> msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
> except ImportError:
> pass
Angel Ezquerra
test-archive: gracefully handle HTTPErrors on get-with-headers...
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:
timeless
tests: test-archive.t use sys.stdout.buffer for binary output in py3
r29182 > stdout = sys.stdout.buffer
> except AttributeError:
> stdout = sys.stdout
> try:
Jun Wu
tests: use LOCALIP...
r31008 > f = util.urlreq.urlopen('http://$LOCALIP:%s/?%s'
Angel Ezquerra
test-archive: gracefully handle HTTPErrors on get-with-headers...
r18770 > % (os.environ['HGPORT'], requeststr))
timeless
tests: test-archive.t use sys.stdout.buffer for binary output in py3
r29182 > stdout.write(f.read())
timeless
tests: test-archive.t use mercurial.util for urllib compat
r29183 > except util.urlerr.httperror as e:
Angel Ezquerra
test-archive: gracefully handle HTTPErrors on get-with-headers...
r18770 > sys.stderr.write(str(e) + '\n')
Martin Geisler
tests: unify test-archive
r11853 > EOF
Augie Fackler
cleanup: use $PYTHON to run python in many more tests...
r32940 $ $PYTHON getarchive.py "$TIP" gz | gunzip | tar tf - 2>/dev/null
Matt Harbison
tests: introduce a subrepository to test-archive.t...
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
Matt Harbison
hgweb: fix a crash when using web.archivesubrepos...
r23232 test-archive-1701ef1f1510/subrepo/sub
Augie Fackler
cleanup: use $PYTHON to run python in many more tests...
r32940 $ $PYTHON getarchive.py "$TIP" bz2 | bunzip2 | tar tf - 2>/dev/null
Matt Harbison
tests: introduce a subrepository to test-archive.t...
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
Matt Harbison
hgweb: fix a crash when using web.archivesubrepos...
r23232 test-archive-1701ef1f1510/subrepo/sub
Augie Fackler
cleanup: use $PYTHON to run python in many more tests...
r32940 $ $PYTHON getarchive.py "$TIP" zip > archive.zip
Matt Mackall
tests: drop a bunch of sed calls from unified tests
r12366 $ unzip -t archive.zip
Martin Geisler
tests: unify test-archive
r11853 Archive: archive.zip
Augie Fackler
tests: glob whitespace between path and OK in unzip(1) output...
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)
Martin Geisler
tests: unify test-archive
r11853 No errors detected in compressed data of archive.zip.
Angel Ezquerra
hgweb: teach archive how to download a specific directory or file...
r18771 test that we can download single directories and files
Augie Fackler
cleanup: use $PYTHON to run python in many more tests...
r32940 $ $PYTHON getarchive.py "$TIP" gz baz | gunzip | tar tf - 2>/dev/null
Matt Harbison
tests: introduce a subrepository to test-archive.t...
r23231 test-archive-1701ef1f1510/baz/bletch
Augie Fackler
cleanup: use $PYTHON to run python in many more tests...
r32940 $ $PYTHON getarchive.py "$TIP" gz foo | gunzip | tar tf - 2>/dev/null
Matt Harbison
tests: introduce a subrepository to test-archive.t...
r23231 test-archive-1701ef1f1510/foo
Angel Ezquerra
hgweb: teach archive how to download a specific directory or file...
r18771
Angel Ezquerra
hgweb: respond HTTP_NOT_FOUND when an archive request does not match any files
r18968 test that we detect file patterns that match no files
Augie Fackler
cleanup: use $PYTHON to run python in many more tests...
r32940 $ $PYTHON getarchive.py "$TIP" gz foobar
Angel Ezquerra
hgweb: respond HTTP_NOT_FOUND when an archive request does not match any files
r18968 HTTP Error 404: file(s) not found: foobar
Angel Ezquerra
hgweb: teach archive how to download a specific directory or file...
r18771 test that we reject unsafe patterns
Augie Fackler
cleanup: use $PYTHON to run python in many more tests...
r32940 $ $PYTHON getarchive.py "$TIP" gz relre:baz
Angel Ezquerra
hgweb: respond HTTP_NOT_FOUND when an archive request does not match any files
r18968 HTTP Error 404: file(s) not found: relre:baz
Angel Ezquerra
hgweb: teach archive how to download a specific directory or file...
r18771
Matt Mackall
tests: drop DAEMON_PIDS from killdaemons calls
r25474 $ killdaemons.py
Martin Geisler
tests: unify test-archive
r11853
$ hg archive -t tar test.tar
$ tar tf test.tar
test/.hg_archival.txt
Matt Harbison
tests: introduce a subrepository to test-archive.t...
r23231 test/.hgsub
test/.hgsubstate
Martin Geisler
tests: unify test-archive
r11853 test/bar
test/baz/bletch
test/foo
Pierre-Yves David
progress: get the extremely verbose output out of default debug...
r25125 $ hg archive --debug -t tbz2 -X baz test.tar.bz2 --config progress.debug=true
Matt Harbison
tests: introduce a subrepository to test-archive.t...
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%)
Martin Geisler
tests: unify test-archive
r11853 $ bunzip2 -dc test.tar.bz2 | tar tf - 2>/dev/null
test/.hg_archival.txt
Matt Harbison
tests: introduce a subrepository to test-archive.t...
r23231 test/.hgsub
test/.hgsubstate
Martin Geisler
tests: unify test-archive
r11853 test/bar
test/foo
$ hg archive -t tgz -p %b-%h test-%h.tar.gz
Matt Mackall
tests: drop a bunch of sed calls from unified tests
r12366 $ gzip -dc test-$QTIP.tar.gz | tar tf - 2>/dev/null
Matt Harbison
tests: introduce a subrepository to test-archive.t...
r23231 test-1701ef1f1510/.hg_archival.txt
test-1701ef1f1510/.hgsub
test-1701ef1f1510/.hgsubstate
test-1701ef1f1510/bar
test-1701ef1f1510/baz/bletch
test-1701ef1f1510/foo
Martin Geisler
tests: unify test-archive
r11853
$ hg archive autodetected_test.tar
$ tar tf autodetected_test.tar
autodetected_test/.hg_archival.txt
Matt Harbison
tests: introduce a subrepository to test-archive.t...
r23231 autodetected_test/.hgsub
autodetected_test/.hgsubstate
Martin Geisler
tests: unify test-archive
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
Matt Harbison
tests: introduce a subrepository to test-archive.t...
r23231 autodetect_override_test.zip/.hgsub
autodetect_override_test.zip/.hgsubstate
Martin Geisler
tests: unify test-archive
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
Augie Fackler
tests: update test-archive to always use hashlib...
r33876 > from __future__ import absolute_import, print_function
> import hashlib
Martin Geisler
tests: unify test-archive
r11853 > import sys
> f1, f2 = sys.argv[1:3]
Augie Fackler
tests: update test-archive to always use hashlib...
r33876 > h1 = hashlib.md5(open(f1, 'rb').read()).hexdigest()
> h2 = hashlib.md5(open(f2, 'rb').read()).hexdigest()
timeless
tests: test-archive.t use print_function
r29177 > print(h1 == h2 or "md5 differ: " + repr((h1, h2)))
Martin Geisler
tests: unify test-archive
r11853 > EOF
Martin Geisler
test-archive: whitespace cleanup
r13140 archive name is stored in the archive, so create similar archives and
rename them afterwards.
Martin Geisler
tests: unify test-archive
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
Augie Fackler
cleanup: use $PYTHON to run python in many more tests...
r32940 $ $PYTHON md5comp.py tip1.tar.gz tip2.tar.gz
Martin Geisler
tests: unify test-archive
r11853 True
$ hg archive -t zip -p /illegal test.zip
abort: archive prefix contains illegal components
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Martin Geisler
tests: unify test-archive
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
Augie Fackler
tests: glob whitespace between path and OK in unzip(1) output...
r29562 testing: test/bar*OK (glob)
testing: test/baz/bletch*OK (glob)
testing: test/foo*OK (glob)
Martin Geisler
tests: unify test-archive
r11853 No errors detected in compressed data of test.zip.
Matt Mackall
tests: drop a bunch of sed calls from unified tests
r12366 $ hg archive -t tar - | tar tf - 2>/dev/null
Matt Harbison
tests: introduce a subrepository to test-archive.t...
r23231 test-1701ef1f1510/.hg_archival.txt
test-1701ef1f1510/.hgsub
test-1701ef1f1510/.hgsubstate
test-1701ef1f1510/bar
test-1701ef1f1510/baz/bletch
test-1701ef1f1510/foo
Martin Geisler
tests: unify test-archive
r11853
$ hg archive -r 0 -t tar rev-%r.tar
Mads Kiilerich
tests: fix void and invalid test in test-archive.t...
r19870 $ [ -f rev-0.tar ]
Martin Geisler
tests: unify test-archive
r11853
test .hg_archival.txt
$ hg archive ../test-tags
$ cat ../test-tags/.hg_archival.txt
repo: daa7f7c60e0a224faa4ff77ca41b2760562af264
Matt Harbison
tests: introduce a subrepository to test-archive.t...
r23231 node: 1701ef1f151069b8747038e93b5186bb43a47504
Martin Geisler
tests: unify test-archive
r11853 branch: default
latesttag: null
Matt Harbison
tests: introduce a subrepository to test-archive.t...
r23231 latesttagdistance: 4
Siddharth Agarwal
archive: store number of changes since latest tag as well...
r23645 changessincelatesttag: 4
Martin Geisler
tests: unify test-archive
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'
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Martin Geisler
tests: unify test-archive
r11853
Martin Geisler
archive: add support for progress extension
r13143 enable progress extension:
$ cp $HGRCPATH $HGRCPATH.no-progress
$ cat >> $HGRCPATH <<EOF
> [progress]
> assume-tty = 1
Augie Fackler
progress using tests: disable time estimates to avoid flakiness
r13149 > format = topic bar number
Martin Geisler
archive: add support for progress extension
r13143 > delay = 0
> refresh = 0
> width = 60
> EOF
Mads Kiilerich
tests: drop filtercr.py and use the very explicit '\r (no-eol) (esc)' markup
r17743 $ hg archive ../with-progress
\r (no-eol) (esc)
Matt Harbison
tests: introduce a subrepository to test-archive.t...
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)
Mads Kiilerich
tests: drop filtercr.py and use the very explicit '\r (no-eol) (esc)' markup
r17743 \r (no-eol) (esc)
Martin Geisler
archive: add support for progress extension
r13143
cleanup after progress extension test:
$ cp $HGRCPATH.no-progress $HGRCPATH
Martin Geisler
tests: unify test-archive
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
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Martin Geisler
test-archive: whitespace cleanup
r13140
Martin Geisler
merge with stable
r12321 old file -- date clamped to 1980
Matt Mackall
tests: fix touch -t with RHEL
r12368 $ touch -t 197501010000 old
Martin Geisler
merge with stable
r12321 $ hg add old
$ hg commit -m old
$ hg archive ../old.zip
Augie Fackler
tests: work around FreeBSD's unzip having slightly different output...
r30844 $ unzip -l ../old.zip | grep -v -- ----- | egrep -v files$
Martin Geisler
merge with stable
r12321 Archive: ../old.zip
Brodie Rao
tests: require regexes in unified tests to be marked with " (re)"...
r12375 \s*Length.* (re)
Siddharth Agarwal
archive: store number of changes since latest tag as well...
r23645 *172*80*00:00*old/.hg_archival.txt (glob)
Brodie Rao
tests: add glob matching for unified tests...
r12376 *0*80*00:00*old/old (glob)
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913
Angel Ezquerra
archive: raise error.Abort if the file pattern matches no files...
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]
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913 $ cd ..
FUJIWARA Katsunori
archival: add "extended-timestamp" extra block for zip archives (issue3600)...
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
Augie Fackler
tests: update test-archive to pass our module import checker
r33946 > from __future__ import absolute_import, print_function
> import os
> import sys
timeless
tests: test-archive.t use print_function
r29177 > print(int(os.stat(sys.argv[1]).st_mtime))
FUJIWARA Katsunori
archival: add "extended-timestamp" extra block for zip archives (issue3600)...
r17628 > EOF
$ hg -R repo archive --prefix tar-extracted archive.tar
$ (TZ=UTC-3; export TZ; tar xf archive.tar)
Augie Fackler
cleanup: use $PYTHON to run python in many more tests...
r32940 $ $PYTHON show_mtime.py tar-extracted/a
FUJIWARA Katsunori
archival: add "extended-timestamp" extra block for zip archives (issue3600)...
r17628 456789012
$ hg -R repo archive --prefix zip-extracted archive.zip
$ (TZ=UTC-3; export TZ; unzip -q archive.zip)
Augie Fackler
cleanup: use $PYTHON to run python in many more tests...
r32940 $ $PYTHON show_mtime.py zip-extracted/a
FUJIWARA Katsunori
archival: add "extended-timestamp" extra block for zip archives (issue3600)...
r17628 456789012
$ cd ..