Merge pull request #2599 from coreos-inc/no-seriously-frack-you-gitlab
Anything can be None in GitLab!
This commit is contained in:
commit
a78d5fb9ff
2 changed files with 26 additions and 14 deletions
|
@ -307,23 +307,30 @@ class GitLabBuildTrigger(BuildTriggerHandler):
|
||||||
@_catch_timeouts
|
@_catch_timeouts
|
||||||
def list_build_sources_for_namespace(self, namespace):
|
def list_build_sources_for_namespace(self, namespace):
|
||||||
def repo_view(repo):
|
def repo_view(repo):
|
||||||
last_modified = dateutil.parser.parse(repo['last_activity_at'])
|
# Because *anything* can be None in GitLab API!
|
||||||
has_admin_permission = False
|
permissions = repo.get('permissions') or {}
|
||||||
|
project_access = permissions.get('project_access') or {}
|
||||||
if repo.get('permissions'):
|
access_level = project_access.get('access_level') or 0
|
||||||
access_level = repo['permissions']['project_access']['access_level']
|
|
||||||
has_admin_permission = _ACCESS_LEVEL_MAP.get(access_level, ("", False))[1]
|
has_admin_permission = _ACCESS_LEVEL_MAP.get(access_level, ("", False))[1]
|
||||||
|
|
||||||
return {
|
view = {
|
||||||
'name': repo['path'],
|
'name': repo['path'],
|
||||||
'full_name': repo['path_with_namespace'],
|
'full_name': repo['path_with_namespace'],
|
||||||
'description': repo['description'] or '',
|
'description': repo.get('description') or '',
|
||||||
'last_updated': timegm(last_modified.utctimetuple()),
|
'url': repo.get('web_url'),
|
||||||
'url': repo['web_url'],
|
|
||||||
'has_admin_permissions': has_admin_permission,
|
'has_admin_permissions': has_admin_permission,
|
||||||
'private': repo['public'] is False,
|
'private': repo.get('public', False) is False,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if repo.get('last_activity_at'):
|
||||||
|
try:
|
||||||
|
last_modified = dateutil.parser.parse(repo['last_activity_at'])
|
||||||
|
view['last_updated'] = timegm(last_modified.utctimetuple())
|
||||||
|
except ValueError:
|
||||||
|
logger.exception('Gitlab gave us an invalid last_activity_at: %s', last_modified)
|
||||||
|
|
||||||
|
return view
|
||||||
|
|
||||||
gl_client = self._get_authorized_client()
|
gl_client = self._get_authorized_client()
|
||||||
repositories = _paginated_iterator(gl_client.getprojects, RepositoryReadException)
|
repositories = _paginated_iterator(gl_client.getprojects, RepositoryReadException)
|
||||||
repos = [repo_view(repo) for repo in repositories if repo['namespace']['path'] == namespace]
|
repos = [repo_view(repo) for repo in repositories if repo['namespace']['path'] == namespace]
|
||||||
|
|
|
@ -27,6 +27,13 @@ def get_currentuser_mock():
|
||||||
}
|
}
|
||||||
|
|
||||||
def project(namespace, name, is_org=False):
|
def project(namespace, name, is_org=False):
|
||||||
|
project_access = None
|
||||||
|
|
||||||
|
if namespace == 'knownuser':
|
||||||
|
project_access = {
|
||||||
|
'access_level': 50,
|
||||||
|
}
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
'id': '%s/%s' % (namespace, name),
|
'id': '%s/%s' % (namespace, name),
|
||||||
'default_branch': 'master',
|
'default_branch': 'master',
|
||||||
|
@ -43,9 +50,7 @@ def project(namespace, name, is_org=False):
|
||||||
'ssh_url_to_repo': 'git://%s/%s' % (namespace, name),
|
'ssh_url_to_repo': 'git://%s/%s' % (namespace, name),
|
||||||
'public': name != 'somerepo',
|
'public': name != 'somerepo',
|
||||||
'permissions': {
|
'permissions': {
|
||||||
'project_access': {
|
'project_access': project_access,
|
||||||
'access_level': 50 if namespace == 'knownuser' else 0,
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
'owner': {
|
'owner': {
|
||||||
'avatar_url': 'avatarurl',
|
'avatar_url': 'avatarurl',
|
||||||
|
|
Reference in a new issue