diff --git a/forwardport/data/views.xml b/forwardport/data/views.xml index c64f9bb6..4536b79f 100644 --- a/forwardport/data/views.xml +++ b/forwardport/data/views.xml @@ -175,8 +175,8 @@ - - + + diff --git a/forwardport/models/project.py b/forwardport/models/project.py index cf60f68a..31b75265 100644 --- a/forwardport/models/project.py +++ b/forwardport/models/project.py @@ -66,28 +66,37 @@ class Project(models.Model): def _compute_git_identity(self): s = requests.Session() for project in self: - if not project.fp_github_token or (self.fp_github_name and self.fp_github_email): + if not project.fp_github_token or (project.fp_github_name and project.fp_github_email): continue r0 = s.get('https://api.github.com/user', headers={ 'Authorization': 'token %s' % project.fp_github_token }) + if not r0.ok: + _logger.error("Failed to fetch forward bot information for project %s: %s", project.name, r0.text or r0.content) + continue + + user = r0.json() + project.fp_github_name = user['name'] or user['login'] + if email := user['email']: + project.fp_github_email = email + continue + if 'user:email' not in set(re.split(r',\s*', r0.headers['x-oauth-scopes'])): - raise UserError(_("The forward-port github token needs the user:email scope to fetch the bot's identity.")) + raise UserError("The forward-port github token needs the user:email scope to fetch the bot's identity.") r1 = s.get('https://api.github.com/user/emails', headers={ 'Authorization': 'token %s' % project.fp_github_token }) - if not (r0.ok and r1.ok): - _logger.error("Failed to fetch bot information for project %s: %s", project.name, (r0.text or r0.content) if not r0.ok else (r1.text or r1.content)) + if not r1.ok: + _logger.error("Failed to fetch forward bot emails for project %s: %s", project.name, r1.text or r1.content) continue - project.fp_github_name = r0.json()['login'] project.fp_github_email = next(( entry['email'] for entry in r1.json() if entry['primary'] ), None) if not project.fp_github_email: - raise UserError(_("The forward-port bot needs a primary email set up.")) + raise UserError("The forward-port bot needs a public or primary email set up.") def write(self, vals): # check on branches both active and inactive so disabling branches doesn't