From 86f01ab7d167d31fe99be59aef51a401de586891 Mon Sep 17 00:00:00 2001 From: Vishesh Handa <me@vhanda.in> Date: Fri, 25 Jan 2019 15:03:42 +0100 Subject: [PATCH] GitHosts: Improve error handling --- lib/apis/githost.dart | 3 +++ lib/apis/github.dart | 11 ++++++----- lib/apis/gitlab.dart | 18 +++++++++++++----- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/lib/apis/githost.dart b/lib/apis/githost.dart index b3a58fb0..c8ffddb0 100644 --- a/lib/apis/githost.dart +++ b/lib/apis/githost.dart @@ -23,7 +23,10 @@ class GitRepo { class GitHostException implements Exception { static const OAuthFailed = const GitHostException("OAuthFailed"); + static const MissingAccessCode = const GitHostException("MissingAccessCode"); static const RepoExists = const GitHostException("RepoExists"); + static const CreateRepoFailed = const GitHostException("CreateRepoFailed"); + static const DeployKeyFailed = const GitHostException("DeployKeyFailed"); final String cause; const GitHostException(this.cause); diff --git a/lib/apis/github.dart b/lib/apis/github.dart index 2efa61fd..b1684675 100644 --- a/lib/apis/github.dart +++ b/lib/apis/github.dart @@ -72,7 +72,7 @@ class GitHub implements GitHost { @override Future<List<GitRepo>> listRepos() async { if (_accessCode.isEmpty) { - throw "GitHub Access Code Missing"; + throw GitHostException.MissingAccessCode; } var url = @@ -103,7 +103,7 @@ class GitHub implements GitHost { Future<GitRepo> createRepo(String name) async { // FIXME: Proper error when the repo exists! if (_accessCode.isEmpty) { - throw "GitHub Access Code Missing"; + throw GitHostException.MissingAccessCode; } var url = "https://api.github.com/user/repos?access_token=$_accessCode"; @@ -123,7 +123,8 @@ class GitHub implements GitHost { response.statusCode.toString() + ": " + response.body); - return null; + + throw GitHostException.CreateRepoFailed; } print("GitHub createRepo: " + response.body); @@ -134,7 +135,7 @@ class GitHub implements GitHost { // FIXME: Proper error when the repo exists! Future addDeployKey(String sshPublicKey, String repo) async { if (_accessCode.isEmpty) { - throw "GitHub Access Code Missing"; + throw GitHostException.MissingAccessCode; } var url = @@ -157,7 +158,7 @@ class GitHub implements GitHost { response.statusCode.toString() + ": " + response.body); - return null; + throw GitHostException.DeployKeyFailed; } print("GitHub addDeployKey: " + response.body); diff --git a/lib/apis/gitlab.dart b/lib/apis/gitlab.dart index 6fff6d5f..fee11e83 100644 --- a/lib/apis/gitlab.dart +++ b/lib/apis/gitlab.dart @@ -63,7 +63,7 @@ class GitLab implements GitHost { @override Future<List<GitRepo>> listRepos() async { if (_accessCode.isEmpty) { - throw "GitHub Access Code Missing"; + throw GitHostException.MissingAccessCode; } // FIXME: pagination! @@ -95,7 +95,7 @@ class GitLab implements GitHost { Future<GitRepo> createRepo(String name) async { // FIXME: Proper error when the repo exists! if (_accessCode.isEmpty) { - throw "GitLab Access Code Missing"; + throw GitHostException.MissingAccessCode; } var url = "https://gitlab.com/api/v4/projects?access_token=$_accessCode"; @@ -115,7 +115,15 @@ class GitLab implements GitHost { response.statusCode.toString() + ": " + response.body); - return null; + + if (response.statusCode == 400) { + Map<String, dynamic> data = json.decode(response.body); + Map<String, dynamic> message = data['message']; + var name = message['name']; + print(name); + } + + throw GitHostException.CreateRepoFailed; } print("GitLab createRepo: " + response.body); @@ -126,7 +134,7 @@ class GitLab implements GitHost { @override Future addDeployKey(String sshPublicKey, String repo) async { if (_accessCode.isEmpty) { - throw "GitLab Access Code Missing"; + throw GitHostException.MissingAccessCode; } repo = repo.replaceAll('/', '%2F'); @@ -150,7 +158,7 @@ class GitLab implements GitHost { response.statusCode.toString() + ": " + response.body); - return null; + throw GitHostException.DeployKeyFailed; } print("GitLab addDeployKey: " + response.body);