##// END OF EJS Templates
exchange: send bundle2 stream clones uncompressed...
Gregory Szorc -
r35805:a84dbc87 default
parent child Browse files
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 preferuncompressed = False
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 preferuncompressed = True
898 prefercompressed = False
898
899
899 return streamres(gen=chunks, prefer_uncompressed=preferuncompressed)
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