提交 c4b343b6 编写于 作者: J Jingwen Owen Ou

Return html url to PR

上级 5a67989a
...@@ -38,16 +38,16 @@ type GitHub struct { ...@@ -38,16 +38,16 @@ type GitHub struct {
Authorization string Authorization string
} }
func (gh *GitHub) call(request *http.Request) (response *http.Response, err error) { func (gh *GitHub) call(request *http.Request) (*http.Response, error) {
request.Header.Set("Authorization", "token "+gh.Authorization) request.Header.Set("Authorization", "token "+gh.Authorization)
response, err = gh.httpClient.Do(request) response, err := gh.httpClient.Do(request)
if err != nil { if err != nil {
return return response, err
} }
if response.StatusCode != 422 { if response.StatusCode != 422 {
return return response, err
} }
body, err := ioutil.ReadAll(response.Body) body, err := ioutil.ReadAll(response.Body)
...@@ -55,7 +55,7 @@ func (gh *GitHub) call(request *http.Request) (response *http.Response, err erro ...@@ -55,7 +55,7 @@ func (gh *GitHub) call(request *http.Request) (response *http.Response, err erro
var unprocessable unprocessableEntity var unprocessable unprocessableEntity
err = json.Unmarshal(body, &unprocessable) err = json.Unmarshal(body, &unprocessable)
if err != nil { if err != nil {
return return response, err
} }
errorMessages := make([]string, len(unprocessable.Errors)) errorMessages := make([]string, len(unprocessable.Errors))
...@@ -86,28 +86,25 @@ func (gh *GitHub) call(request *http.Request) (response *http.Response, err erro ...@@ -86,28 +86,25 @@ func (gh *GitHub) call(request *http.Request) (response *http.Response, err erro
err = errors.New(text) err = errors.New(text)
} }
return return response, err
} }
func (gh *GitHub) httpPost(uri string, extraHeaders map[string]string, content *bytes.Buffer) (response *http.Response, err error) { func (gh *GitHub) httpPost(uri string, extraHeaders map[string]string, content *bytes.Buffer) (*http.Response, error) {
url := fmt.Sprintf("%s%s", GitHubUrl, uri) url := fmt.Sprintf("%s%s", GitHubUrl, uri)
request, err := http.NewRequest("POST", url, content) request, err := http.NewRequest("POST", url, content)
if err != nil { if err != nil {
return return nil, err
} }
// Add (any of) the extra headers to the request
if extraHeaders != nil { if extraHeaders != nil {
for h, v := range extraHeaders { for h, v := range extraHeaders {
request.Header.Set(h, v) request.Header.Set(h, v)
} }
} }
// Set the Content-Type header
request.Header.Set("Content-Type", "application/json; charset=utf-8") request.Header.Set("Content-Type", "application/json; charset=utf-8")
response, err = gh.call(request)
return return gh.call(request)
} }
type PullRequestParams struct { type PullRequestParams struct {
...@@ -117,15 +114,33 @@ type PullRequestParams struct { ...@@ -117,15 +114,33 @@ type PullRequestParams struct {
Head string `json:"head"` Head string `json:"head"`
} }
func (gh *GitHub) CreatePullRequest(owner, repo string, params PullRequestParams) (err error) { type PullRequestResponse struct {
Url string `json:"url"`
HtmlUrl string `json:"html_url"`
DiffUrl string `json:"diff_url"`
PatchUrl string `json:"patch_url"`
IssueUrl string `json:"issue_url"`
}
func (gh *GitHub) CreatePullRequest(owner, repo string, params PullRequestParams) (*PullRequestResponse, error) {
b, err := json.Marshal(params) b, err := json.Marshal(params)
if err != nil { if err != nil {
return return nil, err
} }
buffer := bytes.NewBuffer(b) buffer := bytes.NewBuffer(b)
url := "/repos/" + owner + "/" + repo + "/pulls" url := "/repos/" + owner + "/" + repo + "/pulls"
_, err = gh.httpPost(url, nil, buffer) response, err := gh.httpPost(url, nil, buffer)
js, err := ioutil.ReadAll(response.Body)
if err != nil {
return nil, err
}
var pullRequestResponse PullRequestResponse
err = json.Unmarshal(js, &pullRequestResponse)
if err != nil {
return nil, err
}
return err return &pullRequestResponse, nil
} }
...@@ -63,10 +63,12 @@ func pullRequest(cmd *Command, args []string) { ...@@ -63,10 +63,12 @@ func pullRequest(cmd *Command, args []string) {
} }
params := PullRequestParams{title, body, flagPullRequestBase, flagPullRequestHead} params := PullRequestParams{title, body, flagPullRequestBase, flagPullRequestHead}
err = gh.CreatePullRequest(git.Owner(), git.Repo(), params) pullRequestResponse, err := gh.CreatePullRequest(git.Owner(), git.Repo(), params)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
fmt.Println(pullRequestResponse.HtmlUrl)
} }
func writePullRequestChanges(messageFile, base, head string) error { func writePullRequestChanges(messageFile, base, head string) error {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册