diff options
author | Luke T. Shumaker <lukeshu@lukeshu.com> | 2024-06-06 17:55:32 -0600 |
---|---|---|
committer | Luke T. Shumaker <lukeshu@lukeshu.com> | 2024-06-06 19:00:49 -0600 |
commit | f6080300406a674419dba5005c76bc424df35502 (patch) | |
tree | 213a1296ee3428f1c55eda7d8e449fb05c8d967d /cmd/generate/forge_gerrit.go | |
parent | bf8cb8f908c1d3939a56a3fe75781612c5168555 (diff) |
imworkingon: Add things I've submitted since last update
Diffstat (limited to 'cmd/generate/forge_gerrit.go')
-rw-r--r-- | cmd/generate/forge_gerrit.go | 72 |
1 files changed, 65 insertions, 7 deletions
diff --git a/cmd/generate/forge_gerrit.go b/cmd/generate/forge_gerrit.go index 6bdeece..1e6e073 100644 --- a/cmd/generate/forge_gerrit.go +++ b/cmd/generate/forge_gerrit.go @@ -4,6 +4,7 @@ import ( "encoding" "encoding/json" "fmt" + "net/url" "regexp" "strings" "time" @@ -58,26 +59,83 @@ type Gerrit struct{} var _ Forge = Gerrit{} +var reGoogleGerritCL = regexp.MustCompile(`https://([a-z]+-review\.googlesource\.com)/c/([^?#]+)/\+/([0-9]+)(?:\?[^#]*)?(?:#.*)?$`) + func (Gerrit) FetchStatus(urls []string) (string, error) { + for _, u := range urls { + if reGitHubPR.MatchString(u) { + return "", nil + } + } + for _, u := range urls { + m := reGoogleGerritCL.FindStringSubmatch(u) + if m == nil { + continue + } + authority := m[1] + projectID := m[2] + changeID := m[3] + + urlStr := "https://" + authority + "/changes/" + url.PathEscape(projectID) + "~" + changeID + "?o=MESSAGES&o=DETAILED_ACCOUNTS" + + var obj struct { + Status string `json:"status"` + } + if err := httpGetGerritJSON(urlStr, nil, &obj); err != nil { + return "", err + } + // https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#change-info + switch obj.Status { + case "NEW": + return "open", nil + case "MERGED": + return "merged", nil + case "ABANDONED": + return "closed", nil + } + } return "", nil } func (Gerrit) FetchSubmittedAt(urls []string) (time.Time, error) { + for _, u := range urls { + if reGitHubPR.MatchString(u) { + return time.Time{}, nil + } + } + for _, u := range urls { + m := reGoogleGerritCL.FindStringSubmatch(u) + if m == nil { + continue + } + authority := m[1] + projectID := m[2] + changeID := m[3] + + urlStr := "https://" + authority + "/changes/" + url.PathEscape(projectID) + "~" + changeID + "?o=MESSAGES&o=DETAILED_ACCOUNTS" + + var obj struct { + Created GerritTime `json:"created"` + } + if err := httpGetGerritJSON(urlStr, nil, &obj); err != nil { + return time.Time{}, err + } + return obj.Created.Val, nil + } return time.Time{}, nil } -var reGoLangGerritCL = regexp.MustCompile(`https://go-review\.googlesource\.com/c/([^/?#]+)/\+/([0-9]+)(?:\?[^#]*)?(?:#.*)?$`) - func (Gerrit) FetchLastUpdated(urls []string) (time.Time, User, error) { for _, u := range urls { - m := reGoLangGerritCL.FindStringSubmatch(u) + m := reGoogleGerritCL.FindStringSubmatch(u) if m == nil { continue } - projectID := m[1] - changeID := m[2] + authority := m[1] + projectID := m[2] + changeID := m[3] - urlStr := "https://go-review.googlesource.com/changes/" + projectID + "~" + changeID + "?o=MESSAGES&o=DETAILED_ACCOUNTS" + urlStr := "https://" + authority + "/changes/" + url.PathEscape(projectID) + "~" + changeID + "?o=MESSAGES&o=DETAILED_ACCOUNTS" var obj struct { Updated GerritTime `json:"updated"` @@ -102,7 +160,7 @@ func (Gerrit) FetchLastUpdated(urls []string) (time.Time, User, error) { } else { retUser.Name = message.Author.Name } - retUser.URL = fmt.Sprintf("https://go-review.googlesource.com/dashboard/%d", message.Author.AccountID) + retUser.URL = fmt.Sprintf("https://%s/dashboard/%d", authority, message.Author.AccountID) break } } |