diff options
Diffstat (limited to 'cmd/generate/src_contribs.go')
-rw-r--r-- | cmd/generate/src_contribs.go | 51 |
1 files changed, 49 insertions, 2 deletions
diff --git a/cmd/generate/src_contribs.go b/cmd/generate/src_contribs.go index 39bc04b..5694156 100644 --- a/cmd/generate/src_contribs.go +++ b/cmd/generate/src_contribs.go @@ -108,15 +108,31 @@ type Forge interface { } var forges = []Forge{ + // precedence only matters for .FetchStatus. + // highest precedence - Gerrit{}, // must be higher than GitHub because of golang + Gerrit{}, GitHub{}, GitLab{}, Forgejo{"codeberg.org"}, - PiperMail{}, + PartPiperMail{}, + PartGit{}, // lowest precedence } +func fetchPerURLStatus(urls []string, perURL func(string) (string, error)) (string, error) { + for _, u := range urls { + status, err := perURL(u) + if err != nil { + return "", err + } + if status != "" { + return status, nil + } + } + return "", nil +} + func (c Contribution) fetchStatus() (string, error) { for _, forge := range forges { status, err := forge.FetchStatus(c.URLs) @@ -130,6 +146,20 @@ func (c Contribution) fetchStatus() (string, error) { return "", fmt.Errorf("idk how to get status for %q", c.URLs[0]) } +func fetchPerURLSubmittedAt(urls []string, perURL func(string) (time.Time, error)) (time.Time, error) { + var ret time.Time + for _, u := range urls { + submittedAt, err := perURL(u) + if err != nil { + return time.Time{}, err + } + if !submittedAt.IsZero() && (ret.IsZero() || submittedAt.Before(ret)) { + ret = submittedAt + } + } + return ret, nil +} + func (c Contribution) fetchSubmittedAt() (time.Time, error) { var ret time.Time for _, forge := range forges { @@ -155,6 +185,23 @@ func withinOneSecond(a, b time.Time) bool { return d <= time.Second } +func fetchPerURLLastUpdated(urls []string, perURL func(string) (time.Time, User, error)) (time.Time, User, error) { + var ret struct { + time.Time + User + } + for _, u := range urls { + updatedAt, updatedBy, err := perURL(u) + if err != nil { + return time.Time{}, User{}, err + } + if !updatedAt.IsZero() && (ret.Time.IsZero() || updatedAt.After(ret.Time)) { + ret.Time, ret.User = updatedAt, updatedBy + } + } + return ret.Time, ret.User, nil +} + func (c Contribution) fetchLastUpdated() (time.Time, User, error) { var ret struct { time.Time |