From a9b3cc208d6569ddc1dff5647ab5ba19050a3d53 Mon Sep 17 00:00:00 2001 From: Aleksandr Nogikh Date: Tue, 10 Sep 2024 11:43:36 +0200 Subject: dashboard: refactor relevantBackportJobs() Make it return a single slice. --- dashboard/app/api.go | 8 ++++---- dashboard/app/jobs.go | 39 ++++++++++++++++++++------------------- dashboard/app/main.go | 7 ++++--- 3 files changed, 28 insertions(+), 26 deletions(-) diff --git a/dashboard/app/api.go b/dashboard/app/api.go index eeb8cd565..dfc040932 100644 --- a/dashboard/app/api.go +++ b/dashboard/app/api.go @@ -274,16 +274,16 @@ func apiCommitPoll(c context.Context, ns string, r *http.Request, payload []byte func pollBackportCommits(c context.Context, ns string, count int) ([]string, error) { // Let's assume that there won't be too many pending backports. - bugs, jobs, _, err := relevantBackportJobs(c) + list, err := relevantBackportJobs(c) if err != nil { return nil, fmt.Errorf("failed to query backport: %w", err) } var backportTitles []string - for i, bug := range bugs { - if bug.Namespace != ns { + for _, info := range list { + if info.bug.Namespace != ns { continue } - backportTitles = append(backportTitles, jobs[i].Commits[0].Title) + backportTitles = append(backportTitles, info.job.Commits[0].Title) } randomizer := rand.New(rand.NewSource(timeNow(c).UnixNano())) randomizer.Shuffle(len(backportTitles), func(i, j int) { diff --git a/dashboard/app/jobs.go b/dashboard/app/jobs.go index 6ac0ca322..d697c734b 100644 --- a/dashboard/app/jobs.go +++ b/dashboard/app/jobs.go @@ -1628,45 +1628,46 @@ func uniqueBugs(c context.Context, inBugs []*Bug, inKeys []*db.Key) ([]*Bug, []* return bugs, keys } -func relevantBackportJobs(c context.Context) ( - bugs []*Bug, jobs []*Job, jobKeys []*db.Key, err error) { +type backportInfo struct { + bug *Bug + job *Job + jobKey *db.Key +} + +func relevantBackportJobs(c context.Context) ([]backportInfo, error) { allBugs, _, bugsErr := loadAllBugs(c, func(query *db.Query) *db.Query { return query.Filter("FixCandidateJob>", "").Filter("Status=", BugStatusOpen) }) if bugsErr != nil { - err = bugsErr - return + return nil, bugsErr } var allJobKeys []*db.Key for _, bug := range allBugs { jobKey, decodeErr := db.DecodeKey(bug.FixCandidateJob) if decodeErr != nil { - err = decodeErr - return + return nil, decodeErr } allJobKeys = append(allJobKeys, jobKey) } allJobs := make([]*Job, len(allJobKeys)) - err = db.GetMulti(c, allJobKeys, allJobs) + err := db.GetMulti(c, allJobKeys, allJobs) if err != nil { - return + return nil, err } + var list []backportInfo for i, job := range allJobs { // Some assertions just in case. jobKey := allJobKeys[i] if !job.IsCrossTree() { - err = fmt.Errorf("job %s: expected to be cross-tree", jobKey) - return + return nil, fmt.Errorf("job %s: expected to be cross-tree", jobKey) } if len(job.Commits) != 1 || job.InvalidatedBy != "" || job.BackportedCommit.Title != "" { continue } - bugs = append(bugs, allBugs[i]) - jobs = append(jobs, job) - jobKeys = append(jobKeys, jobKey) + list = append(list, backportInfo{bug: allBugs[i], job: job, jobKey: jobKey}) } - return + return list, nil } func updateBackportCommits(c context.Context, ns string, commits []dashapi.Commit) error { @@ -1677,16 +1678,16 @@ func updateBackportCommits(c context.Context, ns string, commits []dashapi.Commi for _, commit := range commits { perTitle[commit.Title] = commit } - bugs, jobs, jobKeys, err := relevantBackportJobs(c) + list, err := relevantBackportJobs(c) if err != nil { return fmt.Errorf("failed to query backport jobs: %w", err) } - for i, job := range jobs { - rawCommit, ok := perTitle[job.Commits[0].Title] + for _, info := range list { + rawCommit, ok := perTitle[info.job.Commits[0].Title] if !ok { continue } - if bugs[i].Namespace != ns { + if info.bug.Namespace != ns { continue } commit := Commit{ @@ -1696,7 +1697,7 @@ func updateBackportCommits(c context.Context, ns string, commits []dashapi.Commi AuthorName: rawCommit.AuthorName, Date: rawCommit.Date, } - err := commitBackported(c, jobKeys[i], commit) + err := commitBackported(c, info.jobKey, commit) if err != nil { return fmt.Errorf("failed to update backport job: %w", err) } diff --git a/dashboard/app/main.go b/dashboard/app/main.go index 5d11f9951..79b6aa66d 100644 --- a/dashboard/app/main.go +++ b/dashboard/app/main.go @@ -771,13 +771,14 @@ type rawBackport struct { } func loadAllBackports(c context.Context) ([]*rawBackport, error) { - bugs, jobs, _, err := relevantBackportJobs(c) + list, err := relevantBackportJobs(c) if err != nil { return nil, err } var ret []*rawBackport perCommit := map[string]*rawBackport{} - for i, job := range jobs { + for _, info := range list { + job := info.job jobCommit := job.Commits[0] to := &uiRepo{URL: job.MergeBaseRepo, Branch: job.MergeBaseBranch} from := &uiRepo{URL: job.KernelRepo, Branch: job.KernelBranch} @@ -800,7 +801,7 @@ func loadAllBackports(c context.Context) ([]*rawBackport, error) { ret = append(ret, backport) perCommit[hash] = backport } - backport.Bugs = append(backport.Bugs, bugs[i]) + backport.Bugs = append(backport.Bugs, info.bug) } return ret, nil } -- cgit mrf-deployment