diff options
Diffstat (limited to 'cmd/generate/src_contribs.go')
-rw-r--r-- | cmd/generate/src_contribs.go | 59 |
1 files changed, 54 insertions, 5 deletions
diff --git a/cmd/generate/src_contribs.go b/cmd/generate/src_contribs.go index 760b56a..f201ab5 100644 --- a/cmd/generate/src_contribs.go +++ b/cmd/generate/src_contribs.go @@ -102,8 +102,9 @@ func (c Contribution) fetchStatus() (string, error) { var obj struct { // State values are "open" and "closed". - State string `json:"state"` - Merged bool `json:"merged"` + State string `json:"state"` + Merged bool `json:"merged"` + MergeCommitSha string `json:"merge_commit_sha"` } if err := httpGetJSON(urlStr, &obj); err != nil { return "", err @@ -111,7 +112,15 @@ func (c Contribution) fetchStatus() (string, error) { ret := obj.State if obj.Merged { ret = "merged" + tag, err := getGitTagThatContainsAll("https://github.com/"+user+"/"+repo, obj.MergeCommitSha) + if err != nil { + return "", err + } + if tag != "" { + ret = "released in " + tag + } } + return ret, nil } if m := reGitLabMR.FindStringSubmatch(c.URLs[0]); m != nil { @@ -123,7 +132,9 @@ func (c Contribution) fetchStatus() (string, error) { var obj struct { // State values are "opened", "closed", "locked", and "merged". - State string `json:"state"` + State string `json:"state"` + MergeCommitSha string `json:"merge_commit_sha"` + SquashCommitSha string `json:"squash_commit_sha"` } if err := httpGetJSON(urlStr, &obj); err != nil { return "", err @@ -133,13 +144,51 @@ func (c Contribution) fetchStatus() (string, error) { if ret == "opened" { ret = "open" } + + if ret == "merged" { + var mergeCommit string + if obj.MergeCommitSha != "" { + mergeCommit = obj.MergeCommitSha + } + if obj.SquashCommitSha != "" { + mergeCommit = obj.SquashCommitSha + } + if mergeCommit != "" { + tag, err := getGitTagThatContainsAll("https://"+authority+"/"+projectID+".git", mergeCommit) + if err != nil { + return "", err + } + if tag != "" { + ret = "released in " + tag + } + } + } + return ret, nil } if len(c.URLs) > 1 { + var gitURL string + var gitCommits []string for _, u := range c.URLs[1:] { - if reGitHubCommit.MatchString(u) { - return "merged", nil + if m := reGitHubCommit.FindStringSubmatch(u); m != nil { + user := m[1] + repo := m[2] + hash := m[3] + + gitURL = "https://github.com/" + user + "/" + repo + gitCommits = append(gitCommits, hash) + } + } + if len(gitCommits) > 0 { + ret := "merged" + tag, err := getGitTagThatContainsAll(gitURL, gitCommits...) + if err != nil { + return "", err + } + if tag != "" { + ret = "released in " + tag } + return ret, nil } } return "", fmt.Errorf("idk how to get status for %q", c.URLs[0]) |