Show More
@@ -599,6 +599,10 b' class bundle20(object):' | |||||
599 | self.capabilities = dict(capabilities) |
|
599 | self.capabilities = dict(capabilities) | |
600 | self._compengine = util.compengines.forbundletype('UN') |
|
600 | self._compengine = util.compengines.forbundletype('UN') | |
601 | self._compopts = None |
|
601 | self._compopts = None | |
|
602 | # If compression is being handled by a consumer of the raw | |||
|
603 | # data (e.g. the wire protocol), unsetting this flag tells | |||
|
604 | # consumers that the bundle is best left uncompressed. | |||
|
605 | self.prefercompressed = True | |||
602 |
|
606 | |||
603 | def setcompression(self, alg, compopts=None): |
|
607 | def setcompression(self, alg, compopts=None): | |
604 | """setup core part compression to <alg>""" |
|
608 | """setup core part compression to <alg>""" |
@@ -1763,6 +1763,8 b' def getbundlechunks(repo, source, heads=' | |||||
1763 | func(bundler, repo, source, bundlecaps=bundlecaps, b2caps=b2caps, |
|
1763 | func(bundler, repo, source, bundlecaps=bundlecaps, b2caps=b2caps, | |
1764 | **pycompat.strkwargs(kwargs)) |
|
1764 | **pycompat.strkwargs(kwargs)) | |
1765 |
|
1765 | |||
|
1766 | info['prefercompressed'] = bundler.prefercompressed | |||
|
1767 | ||||
1766 | return info, bundler.getchunks() |
|
1768 | return info, bundler.getchunks() | |
1767 |
|
1769 | |||
1768 | @getbundle2partsgenerator('stream') |
|
1770 | @getbundle2partsgenerator('stream') | |
@@ -1770,6 +1772,12 b' def _getbundlestream(bundler, repo, sour' | |||||
1770 | b2caps=None, heads=None, common=None, **kwargs): |
|
1772 | b2caps=None, heads=None, common=None, **kwargs): | |
1771 | if not kwargs.get('stream', False): |
|
1773 | if not kwargs.get('stream', False): | |
1772 | return |
|
1774 | return | |
|
1775 | ||||
|
1776 | # Stream clones don't compress well. And compression undermines a | |||
|
1777 | # goal of stream clones, which is to be fast. Communicate the desire | |||
|
1778 | # to avoid compression to consumers of the bundle. | |||
|
1779 | bundler.prefercompressed = False | |||
|
1780 | ||||
1773 | filecount, bytecount, it = streamclone.generatev2(repo) |
|
1781 | filecount, bytecount, it = streamclone.generatev2(repo) | |
1774 | requirements = ' '.join(sorted(repo.requirements)) |
|
1782 | requirements = ' '.join(sorted(repo.requirements)) | |
1775 | part = bundler.newpart('stream', data=it) |
|
1783 | part = bundler.newpart('stream', data=it) |
@@ -862,7 +862,7 b' def getbundle(repo, proto, others):' | |||||
862 | raise error.Abort(bundle2requiredmain, |
|
862 | raise error.Abort(bundle2requiredmain, | |
863 | hint=bundle2requiredhint) |
|
863 | hint=bundle2requiredhint) | |
864 |
|
864 | |||
865 |
prefer |
|
865 | prefercompressed = True | |
866 |
|
866 | |||
867 | try: |
|
867 | try: | |
868 | if repo.ui.configbool('server', 'disablefullbundle'): |
|
868 | if repo.ui.configbool('server', 'disablefullbundle'): | |
@@ -879,6 +879,7 b' def getbundle(repo, proto, others):' | |||||
879 |
|
879 | |||
880 | info, chunks = exchange.getbundlechunks(repo, 'serve', |
|
880 | info, chunks = exchange.getbundlechunks(repo, 'serve', | |
881 | **pycompat.strkwargs(opts)) |
|
881 | **pycompat.strkwargs(opts)) | |
|
882 | prefercompressed = info.get('prefercompressed', True) | |||
882 | except error.Abort as exc: |
|
883 | except error.Abort as exc: | |
883 | # cleanly forward Abort error to the client |
|
884 | # cleanly forward Abort error to the client | |
884 | if not exchange.bundle2requested(opts.get('bundlecaps')): |
|
885 | if not exchange.bundle2requested(opts.get('bundlecaps')): | |
@@ -894,9 +895,9 b' def getbundle(repo, proto, others):' | |||||
894 | bundler.addpart(bundle2.bundlepart('error:abort', |
|
895 | bundler.addpart(bundle2.bundlepart('error:abort', | |
895 | manargs, advargs)) |
|
896 | manargs, advargs)) | |
896 | chunks = bundler.getchunks() |
|
897 | chunks = bundler.getchunks() | |
897 |
prefer |
|
898 | prefercompressed = False | |
898 |
|
899 | |||
899 |
return streamres(gen=chunks, prefer_uncompressed=prefer |
|
900 | return streamres(gen=chunks, prefer_uncompressed=not prefercompressed) | |
900 |
|
901 | |||
901 | @wireprotocommand('heads') |
|
902 | @wireprotocommand('heads') | |
902 | def heads(repo, proto): |
|
903 | def heads(repo, proto): |
@@ -47,6 +47,32 b' Basic clone' | |||||
47 | rbc-revs-v1 |
|
47 | rbc-revs-v1 | |
48 | #endif |
|
48 | #endif | |
49 |
|
49 | |||
|
50 | getbundle requests with stream=1 are uncompressed | |||
|
51 | ||||
|
52 | $ get-with-headers.py $LOCALIP:$HGPORT '?cmd=getbundle' content-type --bodyfile body --hgproto '0.1 0.2 comp=zlib,none' --requestheader "x-hgarg-1=bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Aphases%253Dheads%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=0000000000000000000000000000000000000000&heads=c17445101a72edac06facd130d14808dfbd5c7c2&stream=1" | |||
|
53 | 200 Script output follows | |||
|
54 | content-type: application/mercurial-0.2 | |||
|
55 | ||||
|
56 | ||||
|
57 | $ f --size --hex --bytes 256 body | |||
|
58 | body: size=112328 | |||
|
59 | 0000: 04 6e 6f 6e 65 48 47 32 30 00 00 00 00 00 00 00 |.noneHG20.......| | |||
|
60 | 0010: 72 06 53 54 52 45 41 4d 00 00 00 00 04 00 09 05 |r.STREAM........| | |||
|
61 | 0020: 09 04 0c 2d 07 02 62 79 74 65 63 6f 75 6e 74 39 |...-..bytecount9| | |||
|
62 | 0030: 38 37 35 38 66 69 6c 65 63 6f 75 6e 74 31 30 33 |8758filecount103| | |||
|
63 | 0040: 30 72 65 71 75 69 72 65 6d 65 6e 74 73 64 6f 74 |0requirementsdot| | |||
|
64 | 0050: 65 6e 63 6f 64 65 20 66 6e 63 61 63 68 65 20 67 |encode fncache g| | |||
|
65 | 0060: 65 6e 65 72 61 6c 64 65 6c 74 61 20 72 65 76 6c |eneraldelta revl| | |||
|
66 | 0070: 6f 67 76 31 20 73 74 6f 72 65 76 65 72 73 69 6f |ogv1 storeversio| | |||
|
67 | 0080: 6e 76 32 00 00 10 00 73 08 42 64 61 74 61 2f 30 |nv2....s.Bdata/0| | |||
|
68 | 0090: 2e 69 00 03 00 01 00 00 00 00 00 00 00 02 00 00 |.i..............| | |||
|
69 | 00a0: 00 01 00 00 00 00 00 00 00 01 ff ff ff ff ff ff |................| | |||
|
70 | 00b0: ff ff 80 29 63 a0 49 d3 23 87 bf ce fe 56 67 92 |...)c.I.#....Vg.| | |||
|
71 | 00c0: 67 2c 69 d1 ec 39 00 00 00 00 00 00 00 00 00 00 |g,i..9..........| | |||
|
72 | 00d0: 00 00 75 30 73 08 42 64 61 74 61 2f 31 2e 69 00 |..u0s.Bdata/1.i.| | |||
|
73 | 00e0: 03 00 01 00 00 00 00 00 00 00 02 00 00 00 01 00 |................| | |||
|
74 | 00f0: 00 00 00 00 00 00 01 ff ff ff ff ff ff ff ff f9 |................| | |||
|
75 | ||||
50 | --uncompressed is an alias to --stream |
|
76 | --uncompressed is an alias to --stream | |
51 |
|
77 | |||
52 | #if stream-legacy |
|
78 | #if stream-legacy |
General Comments 0
You need to be logged in to leave comments.
Login now