internal/worker: move repo logic to repo.go

Logic for clonining and reading from a repository is moved to a separate
file.

Pure code in motion.

Change-Id: Ia41dd8a3b2620e62da773ea0e7c07b38b980d847
Reviewed-on: https://go-review.googlesource.com/c/vuln/+/362235
Trust: Julie Qiu <julie@golang.org>
Run-TryBot: Julie Qiu <julie@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
diff --git a/internal/worker/repo.go b/internal/worker/repo.go
new file mode 100644
index 0000000..50f84fc
--- /dev/null
+++ b/internal/worker/repo.go
@@ -0,0 +1,58 @@
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package worker
+
+import (
+	"log"
+
+	"github.com/go-git/go-git/v5"
+	"github.com/go-git/go-git/v5/plumbing"
+	"github.com/go-git/go-git/v5/plumbing/object"
+	"github.com/go-git/go-git/v5/storage/memory"
+	"golang.org/x/vuln/internal/derrors"
+)
+
+const cvelistRepoURL = "https://github.com/CVEProject/cvelist"
+
+// cloneRepo returns a repo and tree object for the repo at HEAD by
+// cloning the repo at repoURL.
+func cloneRepo(repoURL string) (repo *git.Repository, err error) {
+	defer derrors.Wrap(&err, "cloneRepo(%q)", repoURL)
+	log.Printf("Cloning %q...", cvelistRepoURL)
+	return git.Clone(memory.NewStorage(), nil, &git.CloneOptions{
+		URL:           repoURL,
+		ReferenceName: plumbing.HEAD,
+		SingleBranch:  true,
+		Depth:         1,
+		Tags:          git.NoTags,
+	})
+}
+
+func openRepo(dirpath string) (repo *git.Repository, err error) {
+	defer derrors.Wrap(&err, "openRepo(%q)", dirpath)
+	log.Printf("Opening %q...", dirpath)
+	repo, err = git.PlainOpen(dirpath)
+	if err != nil {
+		return nil, err
+	}
+	return repo, nil
+}
+
+func getRepoRoot(repo *git.Repository) (root *object.Tree, err error) {
+	refName := plumbing.HEAD
+	ref, err := repo.Reference(refName, true)
+	if err != nil {
+		return nil, err
+	}
+	commit, err := repo.CommitObject(ref.Hash())
+	if err != nil {
+		return nil, err
+	}
+	root, err = repo.TreeObject(commit.TreeHash)
+	if err != nil {
+		return nil, err
+	}
+	return root, nil
+}
diff --git a/internal/worker/worker.go b/internal/worker/worker.go
index dd75557..1c7957a 100644
--- a/internal/worker/worker.go
+++ b/internal/worker/worker.go
@@ -16,10 +16,8 @@
 	"strings"
 
 	"github.com/go-git/go-git/v5"
-	"github.com/go-git/go-git/v5/plumbing"
 	"github.com/go-git/go-git/v5/plumbing/filemode"
 	"github.com/go-git/go-git/v5/plumbing/object"
-	"github.com/go-git/go-git/v5/storage/memory"
 	"golang.org/x/vuln/internal/cveschema"
 	"golang.org/x/vuln/internal/derrors"
 	"golang.org/x/vuln/internal/report"
@@ -48,49 +46,6 @@
 	return nil
 }
 
-const cvelistRepoURL = "https://github.com/CVEProject/cvelist"
-
-// cloneRepo returns a repo and tree object for the repo at HEAD by
-// cloning the repo at repoURL.
-func cloneRepo(repoURL string) (repo *git.Repository, err error) {
-	defer derrors.Wrap(&err, "cloneRepo(%q)", repoURL)
-	log.Printf("Cloning %q...", cvelistRepoURL)
-	return git.Clone(memory.NewStorage(), nil, &git.CloneOptions{
-		URL:           repoURL,
-		ReferenceName: plumbing.HEAD,
-		SingleBranch:  true,
-		Depth:         1,
-		Tags:          git.NoTags,
-	})
-}
-
-func openRepo(dirpath string) (repo *git.Repository, err error) {
-	defer derrors.Wrap(&err, "openRepo(%q)", dirpath)
-	log.Printf("Opening %q...", dirpath)
-	repo, err = git.PlainOpen(dirpath)
-	if err != nil {
-		return nil, err
-	}
-	return repo, nil
-}
-
-func getRepoRoot(repo *git.Repository) (root *object.Tree, err error) {
-	refName := plumbing.HEAD
-	ref, err := repo.Reference(refName, true)
-	if err != nil {
-		return nil, err
-	}
-	commit, err := repo.CommitObject(ref.Hash())
-	if err != nil {
-		return nil, err
-	}
-	root, err = repo.TreeObject(commit.TreeHash)
-	if err != nil {
-		return nil, err
-	}
-	return root, nil
-}
-
 // createIssuesToTriage creates GitHub issues to be triaged by the Go security
 // team.
 // TODO: Create GitHub issues. At the moment, this just prints the number of