summaryrefslogtreecommitdiff
diff options
authorJelmer Vernooij <jelmer@jelmer.uk>2019-12-26 14:21:25 +0000
committerBreezy landing bot <breezy.the.bot@gmail.com>2019-12-26 14:21:25 +0000
commita426fbb900bca778d2a31547381f53dba5ef6779 (patch)
tree577154a4277ba2a109b6b1e58184022904a859f6
parentddf1e331005967e7c95094c8cdadfd18eeca5b51 (diff)
parent74100c4c61bcb58a52c5383485761ce3af517051 (diff)
github: Handle 403s for pull request creation.
Merged from https://code.launchpad.net/~jelmer/brz/github-perm-denied/+merge/377117
-rw-r--r--breezy/git/remote.py4
-rw-r--r--breezy/plugins/propose/github.py4
2 files changed, 5 insertions, 3 deletions
diff --git a/breezy/git/remote.py b/breezy/git/remote.py
index e62705ee5c..3fc03fe0ee 100644
--- a/breezy/git/remote.py
+++ b/breezy/git/remote.py
@@ -203,8 +203,8 @@ def parse_git_error(url, message):
base_url, _ = urlutils.split_segment_parameters(url)
return HeadUpdateFailed(base_url)
if message.startswith('access denied or repository not exported:'):
- extra, path = message.split(': ', 1)
- return PermissionDenied(path, extra)
+ extra, path = message.split(':', 1)
+ return PermissionDenied(path.strip(), extra)
if message.endswith('You are not allowed to push code to this project.'):
return PermissionDenied(url, message)
if message.endswith(' does not appear to be a git repository'):
diff --git a/breezy/plugins/propose/github.py b/breezy/plugins/propose/github.py
index 68545ab0af..3197d0e42a 100644
--- a/breezy/plugins/propose/github.py
+++ b/breezy/plugins/propose/github.py
@@ -43,7 +43,7 @@ from ... import (
version_string as breezy_version,
)
from ...config import AuthenticationConfig, GlobalStack
-from ...errors import InvalidHttpResponse
+from ...errors import InvalidHttpResponse, PermissionDenied
from ...git.urls import git_url_to_bzr_url
from ...i18n import gettext
from ...sixish import PY3
@@ -278,6 +278,8 @@ class GitHub(Hoster):
response = self._api_request(
'POST', path, body=json.dumps(data).encode('utf-8'))
+ if response.status == 403:
+ raise PermissionDenied(path, response.text)
if response.status != 201:
raise InvalidHttpResponse(path, 'req is invalid %d %r: %r' % (response.status, data, response.text))
return json.loads(response.text)