diff options
author | Luke T. Shumaker <lukeshu@lukeshu.com> | 2024-06-10 11:31:53 -0600 |
---|---|---|
committer | Luke T. Shumaker <lukeshu@lukeshu.com> | 2024-06-10 11:31:53 -0600 |
commit | 290354461422fff8c05ef9ce37ba154641e3f8fc (patch) | |
tree | 505e4faa4d6fba1e7d0b4addbda39a4e5beb26fd /cmd/generate/forge_github.go | |
parent | 81c8d44fba88dbb049c48363d6b7697224b98a2e (diff) |
imworkingon: Fuss with forge precedence
Diffstat (limited to 'cmd/generate/forge_github.go')
-rw-r--r-- | cmd/generate/forge_github.go | 95 |
1 files changed, 18 insertions, 77 deletions
diff --git a/cmd/generate/forge_github.go b/cmd/generate/forge_github.go index d29e3f7..9f475a3 100644 --- a/cmd/generate/forge_github.go +++ b/cmd/generate/forge_github.go @@ -7,10 +7,7 @@ import ( "time" ) -var ( - reGitHubPR = regexp.MustCompile(`^https://github\.com/([^/?#]+)/([^/?#]+)/pull/([0-9]+)(?:\?[^#]*)?(?:#.*)?$`) - reGitHubCommit = regexp.MustCompile(`^https://github\.com/([^/?#]+)/([^/?#]+)/commit/([0-9a-f]+)(?:\?[^#]*)?(?:#.*)?$`) -) +var reGitHubPR = regexp.MustCompile(`^https://github\.com/([^/?#]+)/([^/?#]+)/pull/([0-9]+)(?:\?[^#]*)?(?:#.*)?$`) func githubPagination(i int) url.Values { params := make(url.Values) @@ -23,11 +20,15 @@ type GitHub struct{} var _ Forge = GitHub{} func (GitHub) FetchStatus(urls []string) (string, error) { - // PR for _, u := range urls { + if reGoogleGerritCL.MatchString(u) { + return "", nil + } + } + return fetchPerURLStatus(urls, func(u string) (string, error) { m := reGitHubPR.FindStringSubmatch(u) if m == nil { - continue + return "", nil } user := m[1] repo := m[2] @@ -57,40 +58,14 @@ func (GitHub) FetchStatus(urls []string) (string, error) { } return ret, nil - } - // Commits from a non-PR - var gitURL string - var gitCommits []string - for _, u := range urls { - 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 := statusMerged - tag, err := getGitTagThatContainsAll(gitURL, gitCommits...) - if err != nil { - return "", err - } - if tag != "" { - ret = fmt.Sprintf(statusReleasedFmt, tag) - } - return ret, nil - } - // Nope - return "", nil + }) } func (GitHub) FetchSubmittedAt(urls []string) (time.Time, error) { - for _, u := range urls { + return fetchPerURLSubmittedAt(urls, func(u string) (time.Time, error) { m := reGitHubPR.FindStringSubmatch(u) if m == nil { - continue + return time.Time{}, nil } user := m[1] repo := m[2] @@ -105,16 +80,19 @@ func (GitHub) FetchSubmittedAt(urls []string) (time.Time, error) { return time.Time{}, err } return obj.CreatedAt, nil - } - return time.Time{}, nil + }) } func (GitHub) FetchLastUpdated(urls []string) (time.Time, User, error) { - // PR for _, u := range urls { + if reGoogleGerritCL.MatchString(u) { + return time.Time{}, User{}, nil + } + } + return fetchPerURLLastUpdated(urls, func(u string) (time.Time, User, error) { m := reGitHubPR.FindStringSubmatch(u) if m == nil { - continue + return time.Time{}, User{}, nil } user := m[1] repo := m[2] @@ -213,42 +191,5 @@ func (GitHub) FetchLastUpdated(urls []string) (time.Time, User, error) { } return retUpdatedAt, retUser, nil - } - // Commits from a non-PR - { - var ret time.Time - for _, u := range urls { - if m := reGitHubCommit.FindStringSubmatch(u); m != nil { - user := m[1] - repo := m[2] - hash := m[3] - - urlStr := "https://api.github.com/repos/" + user + "/" + repo + "/commits/" + hash - var obj struct { - Commit struct { - Author struct { - Date time.Time `json:"date"` - } `json:"author"` - Committer struct { - Date time.Time `json:"date"` - } `json:"committer"` - } `json:"commit"` - } - if err := httpGetJSON(urlStr, nil, &obj); err != nil { - return time.Time{}, User{}, err - } - if obj.Commit.Author.Date.After(ret) { - ret = obj.Commit.Author.Date - } - if obj.Commit.Committer.Date.After(ret) { - ret = obj.Commit.Committer.Date - } - } - } - if ret.IsZero() { - return time.Time{}, User{}, nil - } - } - // Nope - return time.Time{}, User{}, nil + }) } |