Merge lp:~jelmer/brz/merge-3.2 into lp:brz

Proposed by Jelmer Vernooij
Status: Merged
Approved by: Jelmer Vernooij
Approved revision: no longer in the source branch.
Merge reported by: The Breezy Bot
Merged at revision: not available
Proposed branch: lp:~jelmer/brz/merge-3.2
Merge into: lp:brz
Diff against target: 297 lines (+38/-28)
8 files modified
.github/workflows/pythonpackage.yml (+1/-1)
breezy/controldir.py (+2/-2)
breezy/errors.py (+4/-3)
breezy/git/__init__.py (+2/-1)
breezy/plugins/github/hoster.py (+18/-14)
breezy/plugins/gitlab/hoster.py (+2/-1)
breezy/transport/http/response.py (+2/-1)
breezy/transport/http/urllib.py (+7/-5)
To merge this branch: bzr merge lp:~jelmer/brz/merge-3.2
Reviewer Review Type Date Requested Status
Jelmer Vernooij Approve
Review via email: mp+409076@code.launchpad.net

Commit message

Merge lp:brz/3.2.

Description of the change

Merge lp:brz/3.2.

To post a comment you must log in.
Revision history for this message
Jelmer Vernooij (jelmer) :
review: Approve
Revision history for this message
The Breezy Bot (the-breezy-bot) wrote :

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file '.github/workflows/pythonpackage.yml'
--- .github/workflows/pythonpackage.yml 2020-11-19 01:58:47 +0000
+++ .github/workflows/pythonpackage.yml 2021-09-23 15:16:28 +0000
@@ -33,7 +33,7 @@
33 run: |33 run: |
34 python -m pip install --upgrade pip34 python -m pip install --upgrade pip
35 pip install -U pip setuptools35 pip install -U pip setuptools
36 pip install -U pip coverage codecov flake8 testtools paramiko fastimport configobj cython testscenarios six docutils $TEST_REQUIRE sphinx sphinx_epytext launchpadlib patiencediff pyinotify git+https://github.com/dulwich/dulwich36 pip install -U pip coverage codecov flake8 testtools paramiko fastbencode fastimport configobj cython testscenarios six docutils $TEST_REQUIRE sphinx sphinx_epytext launchpadlib patiencediff pyinotify git+https://github.com/dulwich/dulwich
37 - name: Build docs37 - name: Build docs
38 run: |38 run: |
39 make docs PYTHON=python39 make docs PYTHON=python
4040
=== removed file 'README_BDIST_RPM'
=== modified file 'breezy/controldir.py'
--- breezy/controldir.py 2021-08-29 20:05:31 +0000
+++ breezy/controldir.py 2021-09-23 15:16:28 +0000
@@ -773,7 +773,7 @@
773 return klass.open_containing_from_transport(transport)773 return klass.open_containing_from_transport(transport)
774774
775 @classmethod775 @classmethod
776 def open_containing_from_transport(klass, a_transport):776 def open_containing_from_transport(klass, a_transport, probers=None):
777 """Open an existing branch which contains a_transport.base.777 """Open an existing branch which contains a_transport.base.
778778
779 This probes for a branch at a_transport, and searches upwards from there.779 This probes for a branch at a_transport, and searches upwards from there.
@@ -791,7 +791,7 @@
791 url = a_transport.base791 url = a_transport.base
792 while True:792 while True:
793 try:793 try:
794 result = klass.open_from_transport(a_transport)794 result = klass.open_from_transport(a_transport, probers=probers)
795 return result, urlutils.unescape(a_transport.relpath(url))795 return result, urlutils.unescape(a_transport.relpath(url))
796 except errors.NotBranchError:796 except errors.NotBranchError:
797 pass797 pass
798798
=== modified file 'breezy/errors.py'
--- breezy/errors.py 2020-08-10 15:00:17 +0000
+++ breezy/errors.py 2021-09-23 15:16:28 +0000
@@ -1269,7 +1269,7 @@
12691269
1270 _fmt = "Invalid http response for %(path)s: %(msg)s%(orig_error)s"1270 _fmt = "Invalid http response for %(path)s: %(msg)s%(orig_error)s"
12711271
1272 def __init__(self, path, msg, orig_error=None):1272 def __init__(self, path, msg, orig_error=None, headers=None):
1273 self.path = path1273 self.path = path
1274 if orig_error is None:1274 if orig_error is None:
1275 orig_error = ''1275 orig_error = ''
@@ -1277,6 +1277,7 @@
1277 # This is reached for obscure and unusual errors so we want to1277 # This is reached for obscure and unusual errors so we want to
1278 # preserve as much info as possible to ease debug.1278 # preserve as much info as possible to ease debug.
1279 orig_error = ': %r' % (orig_error,)1279 orig_error = ': %r' % (orig_error,)
1280 self.headers = headers
1280 TransportError.__init__(self, msg, orig_error=orig_error)1281 TransportError.__init__(self, msg, orig_error=orig_error)
12811282
12821283
@@ -1284,7 +1285,7 @@
12841285
1285 _fmt = "Unexpected HTTP status %(code)d for %(path)s: %(extra)s"1286 _fmt = "Unexpected HTTP status %(code)d for %(path)s: %(extra)s"
12861287
1287 def __init__(self, path, code, extra=None):1288 def __init__(self, path, code, extra=None, headers=None):
1288 self.path = path1289 self.path = path
1289 self.code = code1290 self.code = code
1290 self.extra = extra or ''1291 self.extra = extra or ''
@@ -1292,7 +1293,7 @@
1292 if extra is not None:1293 if extra is not None:
1293 full_msg += ': ' + extra1294 full_msg += ': ' + extra
1294 InvalidHttpResponse.__init__(1295 InvalidHttpResponse.__init__(
1295 self, path, full_msg)1296 self, path, full_msg, headers=headers)
12961297
12971298
1298class BadHttpRequest(UnexpectedHttpStatus):1299class BadHttpRequest(UnexpectedHttpStatus):
12991300
=== modified file 'breezy/git/__init__.py'
--- breezy/git/__init__.py 2020-11-16 22:17:09 +0000
+++ breezy/git/__init__.py 2021-09-23 15:16:28 +0000
@@ -185,7 +185,8 @@
185 # hgweb :(185 # hgweb :(
186 raise brz_errors.NotBranchError(transport.base)186 raise brz_errors.NotBranchError(transport.base)
187 elif resp.status != 200:187 elif resp.status != 200:
188 raise brz_errors.UnexpectedHttpStatus(url, resp.status)188 raise brz_errors.UnexpectedHttpStatus(
189 url, resp.status, headers=resp.getheaders())
189190
190 ct = resp.getheader("Content-Type")191 ct = resp.getheader("Content-Type")
191 if ct and ct.startswith("application/x-git"):192 if ct and ct.startswith("application/x-git"):
192193
=== modified file 'breezy/plugins/github/hoster.py'
--- breezy/plugins/github/hoster.py 2021-05-02 15:07:21 +0000
+++ breezy/plugins/github/hoster.py 2021-09-23 15:16:28 +0000
@@ -168,7 +168,8 @@
168 if response.status == 422:168 if response.status == 422:
169 raise ValidationFailed(json.loads(response.text))169 raise ValidationFailed(json.loads(response.text))
170 if response.status != 200:170 if response.status != 200:
171 raise UnexpectedHttpStatus(self._pr['url'], response.status)171 raise UnexpectedHttpStatus(
172 self._pr['url'], response.status, headers=response.getheaders())
172 self._pr = json.loads(response.text)173 self._pr = json.loads(response.text)
173174
174 def set_description(self, description):175 def set_description(self, description):
@@ -205,7 +206,8 @@
205 if response.status == 422:206 if response.status == 422:
206 raise ValidationFailed(json.loads(response.text))207 raise ValidationFailed(json.loads(response.text))
207 if response.status != 200:208 if response.status != 200:
208 raise UnexpectedHttpStatus(self._pr['url'], response.status)209 raise UnexpectedHttpStatus(
210 self._pr['url'], response.status, headers=response.getheaders())
209211
210 def get_merged_by(self):212 def get_merged_by(self):
211 merged_by = self._pr.get('merged_by')213 merged_by = self._pr.get('merged_by')
@@ -228,7 +230,7 @@
228 raise ValidationFailed(json.loads(response.text))230 raise ValidationFailed(json.loads(response.text))
229 if response.status != 201:231 if response.status != 201:
230 raise UnexpectedHttpStatus(232 raise UnexpectedHttpStatus(
231 self._pr['comments_url'], response.status)233 self._pr['comments_url'], response.status, headers=response.getheaders())
232 json.loads(response.text)234 json.loads(response.text)
233235
234236
@@ -295,7 +297,8 @@
295 raise NoSuchProject(path)297 raise NoSuchProject(path)
296 if response.status == 200:298 if response.status == 200:
297 return json.loads(response.text)299 return json.loads(response.text)
298 raise UnexpectedHttpStatus(path, response.status)300 raise UnexpectedHttpStatus(
301 path, response.status, headers=response.getheaders())
299302
300 def _get_repo_pulls(self, path, head=None, state=None):303 def _get_repo_pulls(self, path, head=None, state=None):
301 path = path + '?'304 path = path + '?'
@@ -311,7 +314,7 @@
311 raise NoSuchProject(path)314 raise NoSuchProject(path)
312 if response.status == 200:315 if response.status == 200:
313 return json.loads(response.text)316 return json.loads(response.text)
314 raise UnexpectedHttpStatus(path, response.status)317 raise UnexpectedHttpStatus(path, response.status, headers=response.getheaders())
315318
316 def _create_pull(self, path, title, head, base, body=None, labels=None,319 def _create_pull(self, path, title, head, base, body=None, labels=None,
317 assignee=None, draft=False, maintainer_can_modify=False):320 assignee=None, draft=False, maintainer_can_modify=False):
@@ -336,14 +339,14 @@
336 if response.status == 422:339 if response.status == 422:
337 raise ValidationFailed(json.loads(response.text))340 raise ValidationFailed(json.loads(response.text))
338 if response.status != 201:341 if response.status != 201:
339 raise UnexpectedHttpStatus(path, response.status)342 raise UnexpectedHttpStatus(path, response.status, headers=response.getheaders())
340 return json.loads(response.text)343 return json.loads(response.text)
341344
342 def _get_user_by_email(self, email):345 def _get_user_by_email(self, email):
343 path = 'search/users?q=%s+in:email' % email346 path = 'search/users?q=%s+in:email' % email
344 response = self._api_request('GET', path)347 response = self._api_request('GET', path)
345 if response.status != 200:348 if response.status != 200:
346 raise UnexpectedHttpStatus(path, response.status)349 raise UnexpectedHttpStatus(path, response.status, headers=response.getheaders())
347 ret = json.loads(response.text)350 ret = json.loads(response.text)
348 if ret['total_count'] == 0:351 if ret['total_count'] == 0:
349 raise KeyError('no user with email %s' % email)352 raise KeyError('no user with email %s' % email)
@@ -358,14 +361,14 @@
358 path = 'user'361 path = 'user'
359 response = self._api_request('GET', path)362 response = self._api_request('GET', path)
360 if response.status != 200:363 if response.status != 200:
361 raise UnexpectedHttpStatus(path, response.status)364 raise UnexpectedHttpStatus(path, response.status, headers=response.getheaders())
362 return json.loads(response.text)365 return json.loads(response.text)
363366
364 def _get_organization(self, name):367 def _get_organization(self, name):
365 path = 'orgs/%s' % name368 path = 'orgs/%s' % name
366 response = self._api_request('GET', path)369 response = self._api_request('GET', path)
367 if response.status != 200:370 if response.status != 200:
368 raise UnexpectedHttpStatus(path, response.status)371 raise UnexpectedHttpStatus(path, response.status, headers=response.getheaders())
369 return json.loads(response.text)372 return json.loads(response.text)
370373
371 def _list_paged(self, path, parameters=None, per_page=None):374 def _list_paged(self, path, parameters=None, per_page=None):
@@ -384,7 +387,7 @@
384 ';'.join(['%s=%s' % (k, urlutils.quote(v))387 ';'.join(['%s=%s' % (k, urlutils.quote(v))
385 for (k, v) in parameters.items()]))388 for (k, v) in parameters.items()]))
386 if response.status != 200:389 if response.status != 200:
387 raise UnexpectedHttpStatus(path, response.status)390 raise UnexpectedHttpStatus(path, response.status, headers=response.getheaders())
388 data = json.loads(response.text)391 data = json.loads(response.text)
389 for entry in data['items']:392 for entry in data['items']:
390 i += 1393 i += 1
@@ -402,7 +405,7 @@
402 path += '?organization=%s' % owner405 path += '?organization=%s' % owner
403 response = self._api_request('POST', path)406 response = self._api_request('POST', path)
404 if response.status != 202:407 if response.status != 202:
405 raise UnexpectedHttpStatus(path, response.status)408 raise UnexpectedHttpStatus(path, response.status, headers=response.getheaders())
406 return json.loads(response.text)409 return json.loads(response.text)
407410
408 @property411 @property
@@ -558,7 +561,7 @@
558 url = issue['pull_request']['url']561 url = issue['pull_request']['url']
559 response = self._api_request('GET', url)562 response = self._api_request('GET', url)
560 if response.status != 200:563 if response.status != 200:
561 raise UnexpectedHttpStatus(url, response.status)564 raise UnexpectedHttpStatus(url, response.status, headers=response.getheaders())
562 yield GitHubMergeProposal(self, json.loads(response.text))565 yield GitHubMergeProposal(self, json.loads(response.text))
563566
564 def get_proposal_by_url(self, url):567 def get_proposal_by_url(self, url):
@@ -571,7 +574,8 @@
571 path = '/user/repos'574 path = '/user/repos'
572 response = self._api_request('GET', path)575 response = self._api_request('GET', path)
573 if response.status != 200:576 if response.status != 200:
574 raise UnexpectedHttpStatus(self.transport.user_url, response.status)577 raise UnexpectedHttpStatus(
578 self.transport.user_url, response.status, headers=response.getheaders())
575 for project in json.loads(response.text):579 for project in json.loads(response.text):
576 if not project['fork']:580 if not project['fork']:
577 continue581 continue
@@ -586,7 +590,7 @@
586 return590 return
587 if response.status == 200:591 if response.status == 200:
588 return json.loads(response.text)592 return json.loads(response.text)
589 raise UnexpectedHttpStatus(path, response.status)593 raise UnexpectedHttpStatus(path, response.status, headers=response.getheaders())
590594
591 def get_current_user(self):595 def get_current_user(self):
592 if self._token is not None:596 if self._token is not None:
593597
=== modified file 'breezy/plugins/gitlab/hoster.py'
--- breezy/plugins/gitlab/hoster.py 2021-05-02 15:07:21 +0000
+++ breezy/plugins/gitlab/hoster.py 2021-09-23 15:16:28 +0000
@@ -232,7 +232,8 @@
232232
233def _unexpected_status(path, response):233def _unexpected_status(path, response):
234 raise errors.UnexpectedHttpStatus(234 raise errors.UnexpectedHttpStatus(
235 path, response.status, response.data.decode('utf-8', 'replace'))235 path, response.status, response.data.decode('utf-8', 'replace'),
236 headers=response.getheaders())
236237
237238
238class GitLabMergeProposal(MergeProposal):239class GitLabMergeProposal(MergeProposal):
239240
=== modified file 'breezy/transport/http/response.py'
--- breezy/transport/http/response.py 2020-07-18 23:14:00 +0000
+++ breezy/transport/http/response.py 2021-09-23 15:16:28 +0000
@@ -218,7 +218,8 @@
218 if content_range is None:218 if content_range is None:
219 raise errors.InvalidHttpResponse(219 raise errors.InvalidHttpResponse(
220 self._path,220 self._path,
221 'Content-Range header missing in a multi-part response')221 'Content-Range header missing in a multi-part response',
222 headers=self._headers)
222 self.set_range_from_header(content_range)223 self.set_range_from_header(content_range)
223224
224 def set_range_from_header(self, content_range):225 def set_range_from_header(self, content_range):
225226
=== modified file 'breezy/transport/http/urllib.py'
--- breezy/transport/http/urllib.py 2021-05-02 15:07:21 +0000
+++ breezy/transport/http/urllib.py 2021-09-23 15:16:28 +0000
@@ -1732,7 +1732,8 @@
1732 else:1732 else:
1733 raise errors.UnexpectedHttpStatus(1733 raise errors.UnexpectedHttpStatus(
1734 req.get_full_url(), code,1734 req.get_full_url(), code,
1735 'Unable to handle http code: %s' % msg)1735 'Unable to handle http code: %s' % msg,
1736 headers=hdrs)
17361737
17371738
1738class Opener(object):1739class Opener(object):
@@ -1983,7 +1984,7 @@
1983 else:1984 else:
1984 raise errors.BadHttpRequest(abspath, response.reason)1985 raise errors.BadHttpRequest(abspath, response.reason)
1985 elif response.status not in (200, 206):1986 elif response.status not in (200, 206):
1986 raise errors.UnexpectedHttpStatus(abspath, response.status)1987 raise errors.UnexpectedHttpStatus(abspath, response.status, headers=response.getheaders())
19871988
1988 data = handle_response(1989 data = handle_response(
1989 abspath, response.status, response.getheader, response)1990 abspath, response.status, response.getheader, response)
@@ -2214,7 +2215,7 @@
2214 'POST', abspath, body=body_bytes,2215 'POST', abspath, body=body_bytes,
2215 headers={'Content-Type': 'application/octet-stream'})2216 headers={'Content-Type': 'application/octet-stream'})
2216 if response.status not in (200, 403):2217 if response.status not in (200, 403):
2217 raise errors.UnexpectedHttpStatus(abspath, response.status)2218 raise errors.UnexpectedHttpStatus(abspath, response.status, headers=response.getheaders())
2218 code = response.status2219 code = response.status
2219 data = handle_response(2220 data = handle_response(
2220 abspath, code, response.getheader, response)2221 abspath, code, response.getheader, response)
@@ -2228,7 +2229,7 @@
2228 abspath = self._remote_path(relpath)2229 abspath = self._remote_path(relpath)
2229 response = self.request('HEAD', abspath)2230 response = self.request('HEAD', abspath)
2230 if response.status not in (200, 404):2231 if response.status not in (200, 404):
2231 raise errors.UnexpectedHttpStatus(abspath, response.status)2232 raise errors.UnexpectedHttpStatus(abspath, response.status, headers=response.getheaders())
22322233
2233 return response2234 return response
22342235
@@ -2457,7 +2458,8 @@
2457 if resp.status in (403, 405):2458 if resp.status in (403, 405):
2458 raise errors.InvalidHttpResponse(2459 raise errors.InvalidHttpResponse(
2459 abspath,2460 abspath,
2460 "OPTIONS not supported or forbidden for remote URL")2461 "OPTIONS not supported or forbidden for remote URL",
2462 headers=resp.getheaders())
2461 return resp.getheaders()2463 return resp.getheaders()
24622464
24632465

Subscribers

People subscribed via source and target branches