aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--syz-ci/jobs.go93
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)