Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
github
hub
提交
5992fd1b
H
hub
项目概览
github
/
hub
12 个月 前同步成功
通知
3
Star
22523
Fork
2406
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
H
hub
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5992fd1b
编写于
2月 01, 2016
作者:
M
Mislav Marohnić
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Encapsulate HTTP error handling for simpleApi calls
上级
2f48cd1e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
54 addition
and
61 deletion
+54
-61
features/release.feature
features/release.feature
+32
-0
github/client.go
github/client.go
+22
-61
未找到文件。
features/release.feature
浏览文件 @
5992fd1b
...
...
@@ -65,6 +65,38 @@ Feature: hub release
v1.0.2\n
"""
Scenario
:
Repository not found when listing releases
Given the GitHub API server
:
"""
get('/repos/mislav/will_paginate/releases') {
status 404
json message: "Not Found",
documentation_url: "https://developer.github.com/v3"
}
"""
When
I run `hub release`
Then the stderr should contain exactly
:
"""
Error fetching releases: Not Found (HTTP 404)
Not Found\n
"""
And
the exit status should be 1
Scenario
:
Server error when listing releases
Given the GitHub API server
:
"""
get('/repos/mislav/will_paginate/releases') {
status 504
'<html><title>Its fine</title></html>'
}
"""
When
I run `hub release`
Then the stderr should contain exactly
:
"""
Error fetching releases: invalid character '<' looking for beginning of value (HTTP 504)\n
"""
And
the exit status should be 1
Scenario
:
Show specific release
Given the GitHub API server
:
"""
...
...
github/client.go
浏览文件 @
5992fd1b
...
...
@@ -275,16 +275,7 @@ func (client *Client) FetchReleases(project *Project) (response []Release, err e
}
res
,
err
:=
api
.
Get
(
fmt
.
Sprintf
(
"repos/%s/%s/releases"
,
project
.
Owner
,
project
.
Name
))
if
err
!=
nil
{
return
}
if
res
.
StatusCode
!=
200
{
var
errInfo
*
errorInfo
errInfo
,
err
=
res
.
ErrorInfo
()
if
err
!=
nil
{
return
}
err
=
FormatError
(
"fetching releases"
,
errInfo
)
if
err
=
checkStatus
(
200
,
"fetching releases"
,
res
,
err
);
err
!=
nil
{
return
}
...
...
@@ -320,16 +311,7 @@ func (client *Client) CreateRelease(project *Project, releaseParams *Release) (r
}
res
,
err
:=
api
.
PostJSON
(
fmt
.
Sprintf
(
"repos/%s/%s/releases"
,
project
.
Owner
,
project
.
Name
),
releaseParams
)
if
err
!=
nil
{
return
}
if
res
.
StatusCode
!=
201
{
var
errInfo
*
errorInfo
errInfo
,
err
=
res
.
ErrorInfo
()
if
err
!=
nil
{
return
}
err
=
FormatError
(
"creating release"
,
errInfo
)
if
err
=
checkStatus
(
201
,
"creating release"
,
res
,
err
);
err
!=
nil
{
return
}
...
...
@@ -345,16 +327,7 @@ func (client *Client) EditRelease(release *Release, releaseParams map[string]int
}
res
,
err
:=
api
.
PatchJSON
(
release
.
ApiUrl
,
releaseParams
)
if
err
!=
nil
{
return
}
if
res
.
StatusCode
!=
200
{
var
errInfo
*
errorInfo
errInfo
,
err
=
res
.
ErrorInfo
()
if
err
!=
nil
{
return
}
err
=
FormatError
(
"editing release"
,
errInfo
)
if
err
=
checkStatus
(
200
,
"editing release"
,
res
,
err
);
err
!=
nil
{
return
}
...
...
@@ -377,16 +350,7 @@ func (client *Client) UploadReleaseAsset(release *Release, filename, label strin
}
res
,
err
:=
api
.
PostFile
(
uploadUrl
,
filename
)
if
err
!=
nil
{
return
}
if
res
.
StatusCode
!=
201
{
var
errInfo
*
errorInfo
errInfo
,
err
=
res
.
ErrorInfo
()
if
err
!=
nil
{
return
}
err
=
FormatError
(
"uploading release asset"
,
errInfo
)
if
err
=
checkStatus
(
201
,
"uploading release asset"
,
res
,
err
);
err
!=
nil
{
return
}
...
...
@@ -402,17 +366,8 @@ func (client *Client) DeleteReleaseAsset(asset *ReleaseAsset) (err error) {
}
res
,
err
:=
api
.
Delete
(
asset
.
ApiUrl
)
if
err
!=
nil
{
return
}
if
res
.
StatusCode
!=
204
{
var
errInfo
*
errorInfo
errInfo
,
err
=
res
.
ErrorInfo
()
if
err
!=
nil
{
return
}
err
=
FormatError
(
"deleting release asset"
,
errInfo
)
}
err
=
checkStatus
(
204
,
"deleting release asset"
,
res
,
err
)
return
}
...
...
@@ -434,16 +389,7 @@ func (client *Client) FetchCIStatus(project *Project, sha string) (status *CISta
}
res
,
err
:=
api
.
Get
(
fmt
.
Sprintf
(
"repos/%s/%s/commits/%s/status"
,
project
.
Owner
,
project
.
Name
,
sha
))
if
err
!=
nil
{
return
}
if
res
.
StatusCode
!=
200
{
var
errInfo
*
errorInfo
errInfo
,
err
=
res
.
ErrorInfo
()
if
err
!=
nil
{
return
}
err
=
FormatError
(
"fetching statuses"
,
errInfo
)
if
err
=
checkStatus
(
200
,
"fetching statuses"
,
res
,
err
);
err
!=
nil
{
return
}
...
...
@@ -720,6 +666,21 @@ func normalizeHost(host string) string {
return
host
}
func
checkStatus
(
expectedStatus
int
,
action
string
,
response
*
simpleResponse
,
err
error
)
error
{
if
err
!=
nil
{
return
fmt
.
Errorf
(
"Error %s: %s"
,
action
,
err
.
Error
())
}
else
if
response
.
StatusCode
!=
expectedStatus
{
errInfo
,
err
:=
response
.
ErrorInfo
()
if
err
==
nil
{
return
FormatError
(
action
,
errInfo
)
}
else
{
return
fmt
.
Errorf
(
"Error %s: %s (HTTP %d)"
,
action
,
err
.
Error
(),
response
.
StatusCode
)
}
}
else
{
return
nil
}
}
func
FormatError
(
action
string
,
err
error
)
(
ee
error
)
{
switch
e
:=
err
.
(
type
)
{
default
:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录