comparison mercurial/statichttprepo.py @ 43076:2372284d9457

formatting: blacken the codebase This is using my patch to black (https://github.com/psf/black/pull/826) so we don't un-wrap collection literals. Done with: hg files 'set:**.py - mercurial/thirdparty/** - "contrib/python-zstandard/**"' | xargs black -S # skip-blame mass-reformatting only # no-check-commit reformats foo_bar functions Differential Revision: https://phab.mercurial-scm.org/D6971
author Augie Fackler <augie@google.com>
date Sun, 06 Oct 2019 09:45:02 -0400
parents 3518da504303
children 687b865b95ad
comparison
equal deleted inserted replaced
43075:57875cf423c9 43076:2372284d9457
27 ) 27 )
28 28
29 urlerr = util.urlerr 29 urlerr = util.urlerr
30 urlreq = util.urlreq 30 urlreq = util.urlreq
31 31
32
32 class httprangereader(object): 33 class httprangereader(object):
33 def __init__(self, url, opener): 34 def __init__(self, url, opener):
34 # we assume opener has HTTPRangeHandler 35 # we assume opener has HTTPRangeHandler
35 self.url = url 36 self.url = url
36 self.pos = 0 37 self.pos = 0
43 def __exit__(self, exc_type, exc_value, traceback): 44 def __exit__(self, exc_type, exc_value, traceback):
44 self.close() 45 self.close()
45 46
46 def seek(self, pos): 47 def seek(self, pos):
47 self.pos = pos 48 self.pos = pos
49
48 def read(self, bytes=None): 50 def read(self, bytes=None):
49 req = urlreq.request(pycompat.strurl(self.url)) 51 req = urlreq.request(pycompat.strurl(self.url))
50 end = '' 52 end = ''
51 if bytes: 53 if bytes:
52 end = self.pos + bytes - 1 54 end = self.pos + bytes - 1
65 67
66 if code == 200: 68 if code == 200:
67 # HTTPRangeHandler does nothing if remote does not support 69 # HTTPRangeHandler does nothing if remote does not support
68 # Range headers and returns the full entity. Let's slice it. 70 # Range headers and returns the full entity. Let's slice it.
69 if bytes: 71 if bytes:
70 data = data[self.pos:self.pos + bytes] 72 data = data[self.pos : self.pos + bytes]
71 else: 73 else:
72 data = data[self.pos:] 74 data = data[self.pos :]
73 elif bytes: 75 elif bytes:
74 data = data[:bytes] 76 data = data[:bytes]
75 self.pos += len(data) 77 self.pos += len(data)
76 return data 78 return data
79
77 def readlines(self): 80 def readlines(self):
78 return self.read().splitlines(True) 81 return self.read().splitlines(True)
82
79 def __iter__(self): 83 def __iter__(self):
80 return iter(self.readlines()) 84 return iter(self.readlines())
85
81 def close(self): 86 def close(self):
82 pass 87 pass
88
83 89
84 # _RangeError and _HTTPRangeHandler were originally in byterange.py, 90 # _RangeError and _HTTPRangeHandler were originally in byterange.py,
85 # which was itself extracted from urlgrabber. See the last version of 91 # which was itself extracted from urlgrabber. See the last version of
86 # byterange.py from history if you need more information. 92 # byterange.py from history if you need more information.
87 class _RangeError(IOError): 93 class _RangeError(IOError):
88 """Error raised when an unsatisfiable range is requested.""" 94 """Error raised when an unsatisfiable range is requested."""
95
89 96
90 class _HTTPRangeHandler(urlreq.basehandler): 97 class _HTTPRangeHandler(urlreq.basehandler):
91 """Handler that enables HTTP Range headers. 98 """Handler that enables HTTP Range headers.
92 99
93 This was extremely simple. The Range header is a HTTP feature to 100 This was extremely simple. The Range header is a HTTP feature to
105 112
106 def http_error_416(self, req, fp, code, msg, hdrs): 113 def http_error_416(self, req, fp, code, msg, hdrs):
107 # HTTP's Range Not Satisfiable error 114 # HTTP's Range Not Satisfiable error
108 raise _RangeError('Requested Range Not Satisfiable') 115 raise _RangeError('Requested Range Not Satisfiable')
109 116
117
110 def build_opener(ui, authinfo): 118 def build_opener(ui, authinfo):
111 # urllib cannot handle URLs with embedded user or passwd 119 # urllib cannot handle URLs with embedded user or passwd
112 urlopener = url.opener(ui, authinfo) 120 urlopener = url.opener(ui, authinfo)
113 urlopener.add_handler(_HTTPRangeHandler()) 121 urlopener.add_handler(_HTTPRangeHandler())
114 122
129 else: 137 else:
130 return self.base 138 return self.base
131 139
132 return statichttpvfs 140 return statichttpvfs
133 141
142
134 class statichttppeer(localrepo.localpeer): 143 class statichttppeer(localrepo.localpeer):
135 def local(self): 144 def local(self):
136 return None 145 return None
146
137 def canpush(self): 147 def canpush(self):
138 return False 148 return False
139 149
140 class statichttprepository(localrepo.localrepository, 150
141 localrepo.revlogfilestorage): 151 class statichttprepository(
152 localrepo.localrepository, localrepo.revlogfilestorage
153 ):
142 supported = localrepo.localrepository._basesupported 154 supported = localrepo.localrepository._basesupported
143 155
144 def __init__(self, ui, path): 156 def __init__(self, ui, path):
145 self._url = path 157 self._url = path
146 self.ui = ui 158 self.ui = ui
176 # we do not care about empty old-style repositories here 188 # we do not care about empty old-style repositories here
177 msg = _("'%s' does not appear to be an hg repository") % path 189 msg = _("'%s' does not appear to be an hg repository") % path
178 raise error.RepoError(msg) 190 raise error.RepoError(msg)
179 191
180 supportedrequirements = localrepo.gathersupportedrequirements(ui) 192 supportedrequirements = localrepo.gathersupportedrequirements(ui)
181 localrepo.ensurerequirementsrecognized(requirements, 193 localrepo.ensurerequirementsrecognized(
182 supportedrequirements) 194 requirements, supportedrequirements
195 )
183 localrepo.ensurerequirementscompatible(ui, requirements) 196 localrepo.ensurerequirementscompatible(ui, requirements)
184 197
185 # setup store 198 # setup store
186 self.store = localrepo.makestore(requirements, self.path, vfsclass) 199 self.store = localrepo.makestore(requirements, self.path, vfsclass)
187 self.spath = self.store.path 200 self.spath = self.store.path
189 self.sjoin = self.store.join 202 self.sjoin = self.store.join
190 self._filecache = {} 203 self._filecache = {}
191 self.requirements = requirements 204 self.requirements = requirements
192 205
193 rootmanifest = manifest.manifestrevlog(self.svfs) 206 rootmanifest = manifest.manifestrevlog(self.svfs)
194 self.manifestlog = manifest.manifestlog(self.svfs, self, rootmanifest, 207 self.manifestlog = manifest.manifestlog(
195 self.narrowmatch()) 208 self.svfs, self, rootmanifest, self.narrowmatch()
209 )
196 self.changelog = changelog.changelog(self.svfs) 210 self.changelog = changelog.changelog(self.svfs)
197 self._tags = None 211 self._tags = None
198 self.nodetagscache = None 212 self.nodetagscache = None
199 self._branchcaches = branchmap.BranchMapCache() 213 self._branchcaches = branchmap.BranchMapCache()
200 self._revbranchcache = None 214 self._revbranchcache = None
214 228
215 def peer(self): 229 def peer(self):
216 return statichttppeer(self) 230 return statichttppeer(self)
217 231
218 def wlock(self, wait=True): 232 def wlock(self, wait=True):
219 raise error.LockUnavailable(0, _('lock not available'), 'lock', 233 raise error.LockUnavailable(
220 _('cannot lock static-http repository')) 234 0,
235 _('lock not available'),
236 'lock',
237 _('cannot lock static-http repository'),
238 )
221 239
222 def lock(self, wait=True): 240 def lock(self, wait=True):
223 raise error.Abort(_('cannot lock static-http repository')) 241 raise error.Abort(_('cannot lock static-http repository'))
224 242
225 def _writecaches(self): 243 def _writecaches(self):
226 pass # statichttprepository are read only 244 pass # statichttprepository are read only
245
227 246
228 def instance(ui, path, create, intents=None, createopts=None): 247 def instance(ui, path, create, intents=None, createopts=None):
229 if create: 248 if create:
230 raise error.Abort(_('cannot create new static-http repository')) 249 raise error.Abort(_('cannot create new static-http repository'))
231 return statichttprepository(ui, path[7:]) 250 return statichttprepository(ui, path[7:])