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.go51
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