diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2023-04-27 16:44:06 +0200 |
|---|---|---|
| committer | Aleksandr Nogikh <wp32pw@gmail.com> | 2023-04-28 14:53:23 +0200 |
| commit | 6f737ad74e9f2c8a824a0198c378e7ca5f763495 (patch) | |
| tree | 127cd264074f6af5e464c1dd3817387cd1d95b57 /syz-ci | |
| parent | 957059b1354b91346a6ff3912fcfc33cbb058bf6 (diff) | |
syz-ci: extract job commit fetching logic
The functionality has become too complex to keep it together with the
other job processing code.
Diffstat (limited to 'syz-ci')
| -rw-r--r-- | syz-ci/jobs.go | 93 |
1 files changed, 52 insertions, 41 deletions
diff --git a/syz-ci/jobs.go b/syz-ci/jobs.go index 1f0b62d55..7de7cdfe6 100644 --- a/syz-ci/jobs.go +++ b/syz-ci/jobs.go @@ -591,47 +591,9 @@ func (jp *JobProcessor) testPatch(job *Job, mgrcfg *mgrconfig.Config) error { if err != nil { return fmt.Errorf("failed to create kernel repo: %v", err) } - var kernelCommit *vcs.Commit - if req.MergeBaseRepo != "" { - jp.Logf(1, "checking out the base kernel...") - firstCommit, err := checkoutKernelOrCommit(repo, req.KernelRepo, req.KernelBranch) - if err != nil { - return fmt.Errorf("failed to checkout first kernel repo %v on %v: %v", - req.KernelRepo, req.KernelBranch, err) - } - secondCommit, err := checkoutKernelOrCommit(repo, req.MergeBaseRepo, req.MergeBaseBranch) - if err != nil { - return fmt.Errorf("failed to checkout second kernel repo %v on %v: %v", - req.MergeBaseRepo, req.MergeBaseBranch, err) - } - bases, err := repo.MergeBases(firstCommit.Hash, secondCommit.Hash) - if err != nil { - return fmt.Errorf("failed to calculate merge bases between %v and %v: %v", - firstCommit.Hash, secondCommit.Hash, err) - } - if len(bases) != 1 { - return fmt.Errorf("expected one merge base between %v and %v, got %d", - firstCommit.Hash, secondCommit.Hash, len(bases)) - } - kernelCommit, err = repo.CheckoutCommit(req.KernelRepo, bases[0].Hash) - if err != nil { - return fmt.Errorf("failed to checkout kernel repo %v on merge base commit %v: %v", - req.KernelRepo, bases[0].Hash, err) - } - resp.Build.KernelBranch = "" - } else if vcs.CheckCommitHash(req.KernelBranch) { - kernelCommit, err = repo.CheckoutCommit(req.KernelRepo, req.KernelBranch) - if err != nil { - return fmt.Errorf("failed to checkout kernel repo %v on commit %v: %v", - req.KernelRepo, req.KernelBranch, err) - } - resp.Build.KernelBranch = "" - } else { - kernelCommit, err = repo.CheckoutBranch(req.KernelRepo, req.KernelBranch) - if err != nil { - return fmt.Errorf("failed to checkout kernel repo %v/%v: %v", - req.KernelRepo, req.KernelBranch, err) - } + kernelCommit, err := jp.checkoutJobCommit(job, repo) + if err != nil { + return err } resp.Build.KernelCommit = kernelCommit.Hash resp.Build.KernelCommitTitle = kernelCommit.Title @@ -696,6 +658,55 @@ func (jp *JobProcessor) testPatch(job *Job, mgrcfg *mgrconfig.Config) error { return nil } +func (jp *JobProcessor) checkoutJobCommit(job *Job, repo vcs.Repo) (*vcs.Commit, error) { + req, resp := job.req, job.resp + var kernelCommit *vcs.Commit + if req.MergeBaseRepo != "" { + jp.Logf(1, "checking out the base kernel...") + firstCommit, err := checkoutKernelOrCommit(repo, req.KernelRepo, req.KernelBranch) + if err != nil { + return nil, fmt.Errorf("failed to checkout first kernel repo %v on %v: %v", + req.KernelRepo, req.KernelBranch, err) + } + secondCommit, err := checkoutKernelOrCommit(repo, req.MergeBaseRepo, req.MergeBaseBranch) + if err != nil { + return nil, fmt.Errorf("failed to checkout second kernel repo %v on %v: %v", + req.MergeBaseRepo, req.MergeBaseBranch, err) + } + bases, err := repo.MergeBases(firstCommit.Hash, secondCommit.Hash) + if err != nil { + return nil, fmt.Errorf("failed to calculate merge bases between %v and %v: %v", + firstCommit.Hash, secondCommit.Hash, err) + } + if len(bases) != 1 { + return nil, fmt.Errorf("expected one merge base between %v and %v, got %d", + firstCommit.Hash, secondCommit.Hash, len(bases)) + } + kernelCommit, err = repo.CheckoutCommit(req.KernelRepo, bases[0].Hash) + if err != nil { + return nil, fmt.Errorf("failed to checkout kernel repo %v on merge base %v: %v", + req.KernelRepo, bases[0].Hash, err) + } + resp.Build.KernelBranch = "" + } else if vcs.CheckCommitHash(req.KernelBranch) { + var err error + kernelCommit, err = repo.CheckoutCommit(req.KernelRepo, req.KernelBranch) + if err != nil { + return nil, fmt.Errorf("failed to checkout kernel repo %v on commit %v: %v", + req.KernelRepo, req.KernelBranch, err) + } + resp.Build.KernelBranch = "" + } else { + var err error + kernelCommit, err = repo.CheckoutBranch(req.KernelRepo, req.KernelBranch) + if err != nil { + return nil, fmt.Errorf("failed to checkout kernel repo %v/%v: %v", + req.KernelRepo, req.KernelBranch, err) + } + } + return kernelCommit, nil +} + func checkoutKernelOrCommit(repo vcs.Repo, url, branch string) (*vcs.Commit, error) { if vcs.CheckCommitHash(branch) { return repo.CheckoutCommit(url, branch) |
