summaryrefslogtreecommitdiff
path: root/cmd/generate/src_contribs.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/generate/src_contribs.go')
-rw-r--r--cmd/generate/src_contribs.go59
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])