##// END OF EJS Templates
clonebundles: advertise clone bundles feature to clients...
Gregory Szorc -
r26691:23c0da28 default
parent child Browse files
Show More
@@ -64,7 +64,10 b' REQUIRESNI'
64 Value should be "true".
64 Value should be "true".
65 """
65 """
66
66
67 from mercurial.i18n import _
68 from mercurial.node import nullid
67 from mercurial import (
69 from mercurial import (
70 exchange,
68 extensions,
71 extensions,
69 wireproto,
72 wireproto,
70 )
73 )
@@ -94,5 +97,44 b' def bundles(repo, proto):'
94 """
97 """
95 return repo.opener.tryread('clonebundles.manifest')
98 return repo.opener.tryread('clonebundles.manifest')
96
99
100 @exchange.getbundle2partsgenerator('clonebundlesadvertise', 0)
101 def advertiseclonebundlespart(bundler, repo, source, bundlecaps=None,
102 b2caps=None, heads=None, common=None,
103 cbattempted=None, **kwargs):
104 """Inserts an output part to advertise clone bundles availability."""
105 # Allow server operators to disable this behavior.
106 # # experimental config: ui.clonebundleadvertise
107 if not repo.ui.configbool('ui', 'clonebundleadvertise', True):
108 return
109
110 # Only advertise if a manifest is present.
111 if not repo.opener.exists('clonebundles.manifest'):
112 return
113
114 # And when changegroup data is requested.
115 if not kwargs.get('cg', True):
116 return
117
118 # And when the client supports clone bundles.
119 if cbattempted is None:
120 return
121
122 # And when the client didn't attempt a clone bundle as part of this pull.
123 if cbattempted:
124 return
125
126 # And when a full clone is requested.
127 # Note: client should not send "cbattempted" for regular pulls. This check
128 # is defense in depth.
129 if common and common != [nullid]:
130 return
131
132 msg = _('this server supports the experimental "clone bundles" feature '
133 'that should enable faster and more reliable cloning\n'
134 'help test it by setting the "experimental.clonebundles" config '
135 'flag to "true"')
136
137 bundler.newpart('output', data=msg)
138
97 def extsetup(ui):
139 def extsetup(ui):
98 extensions.wrapfunction(wireproto, '_capabilities', capabilities)
140 extensions.wrapfunction(wireproto, '_capabilities', capabilities)
@@ -64,6 +64,17 b' Empty manifest file results in retrieval'
64 adding file changes
64 adding file changes
65 added 2 changesets with 2 changes to 2 files
65 added 2 changesets with 2 changes to 2 files
66
66
67 Server advertises presence of feature to client requesting full clone
68
69 $ hg --config experimental.clonebundles=false clone -U http://localhost:$HGPORT advertise-on-clone
70 requesting all changes
71 remote: this server supports the experimental "clone bundles" feature that should enable faster and more reliable cloning
72 remote: help test it by setting the "experimental.clonebundles" config flag to "true"
73 adding changesets
74 adding manifests
75 adding file changes
76 added 2 changesets with 2 changes to 2 files
77
67 Manifest file with invalid URL aborts
78 Manifest file with invalid URL aborts
68
79
69 $ echo 'http://does.not.exist/bundle.hg' > server/.hg/clonebundles.manifest
80 $ echo 'http://does.not.exist/bundle.hg' > server/.hg/clonebundles.manifest
General Comments 0
You need to be logged in to leave comments. Login now