Move findRule() into bazel_util.go.
Move to shared util file so that it may be used by other exporters.
Bug: skia:13485
Change-Id: I69c2f90dd1e333bd19e529b1660790e4bb5fc506
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/566438
Reviewed-by: Kevin Lubick <kjlubick@google.com>
diff --git a/bazel/exporter/bazel_util.go b/bazel/exporter/bazel_util.go
index a7cfd54..728c084 100644
--- a/bazel/exporter/bazel_util.go
+++ b/bazel/exporter/bazel_util.go
@@ -14,6 +14,7 @@
"go.skia.org/infra/go/skerr"
"go.skia.org/infra/go/util"
+ "go.skia.org/skia/bazel/exporter/build_proto/analysis_v2"
"go.skia.org/skia/bazel/exporter/build_proto/build"
)
@@ -34,6 +35,18 @@
return name[0] == '@'
}
+// Given a Bazel rule name find that rule from within the
+// query results.
+func findRule(qr *analysis_v2.CqueryResult, name string) (*build.Rule, error) {
+ for _, result := range qr.GetResults() {
+ r := result.GetTarget().GetRule()
+ if r.GetName() == name {
+ return r, nil
+ }
+ }
+ return nil, skerr.Fmt(`cannot find rule %q`, name)
+}
+
// Parse a rule into its constituent parts.
// https://docs.bazel.build/versions/main/guide.html#specifying-targets-to-build
func parseRule(rule string) (repo string, path string, target string, err error) {
diff --git a/bazel/exporter/bazel_util_test.go b/bazel/exporter/bazel_util_test.go
index cee865d..b111570 100644
--- a/bazel/exporter/bazel_util_test.go
+++ b/bazel/exporter/bazel_util_test.go
@@ -10,7 +10,9 @@
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ "go.skia.org/skia/bazel/exporter/build_proto/analysis_v2"
"go.skia.org/skia/bazel/exporter/build_proto/build"
+ "google.golang.org/protobuf/encoding/prototext"
)
func TestMakeCanonicalRuleName_ValidInput_Success(t *testing.T) {
@@ -128,3 +130,34 @@
func TestIsFileRule_ValidNonFileRule_ReturnsFalse(t *testing.T) {
assert.False(t, isFileTarget("//dir/path:hello"))
}
+
+func TestFindRule_RuleExists_Success(t *testing.T) {
+ qr := analysis_v2.CqueryResult{}
+ err := prototext.Unmarshal([]byte(textProto), &qr)
+ require.NoError(t, err)
+
+ r, err := findRule(&qr, "//src/apps:hello")
+ require.NoError(t, err)
+ require.NotNil(t, r)
+ assert.Equal(t, "//src/apps:hello", r.GetName())
+}
+
+func TestFindRule_RuleDoesntExists_ReturnsError(t *testing.T) {
+ qr := analysis_v2.CqueryResult{}
+ err := prototext.Unmarshal([]byte(textProto), &qr)
+ require.NoError(t, err)
+
+ r, err := findRule(&qr, "//path/to:nonexistent_rule")
+ assert.Error(t, err)
+ assert.Nil(t, r)
+}
+
+func TestFindRule_InvalidRule_ReturnsError(t *testing.T) {
+ qr := analysis_v2.CqueryResult{}
+ err := prototext.Unmarshal([]byte(textProto), &qr)
+ require.NoError(t, err)
+
+ r, err := findRule(&qr, "")
+ assert.Error(t, err)
+ assert.Nil(t, r)
+}
diff --git a/bazel/exporter/cmake_exporter.go b/bazel/exporter/cmake_exporter.go
index 58eaf33..d39f07c 100644
--- a/bazel/exporter/cmake_exporter.go
+++ b/bazel/exporter/cmake_exporter.go
@@ -32,18 +32,6 @@
}
}
-// Given a Bazel rule name find that rule from within the
-// query results.
-func findRule(qr *analysis_v2.CqueryResult, name string) (*build.Rule, error) {
- for _, result := range qr.GetResults() {
- r := result.GetTarget().GetRule()
- if r.GetName() == name {
- return r, nil
- }
- }
- return nil, skerr.Fmt(`cannot find rule %q`, name)
-}
-
// Return the default copts (COMPILE_FLAGS in CMake) for the macOS toolchain.
func getMacPlatformRuleCopts() []string {
// TODO(crbug.com/skia/13586): Retrieve these values from Bazel.
diff --git a/bazel/exporter/cmake_exporter_test.go b/bazel/exporter/cmake_exporter_test.go
index 4ac6b77..4942bf3 100644
--- a/bazel/exporter/cmake_exporter_test.go
+++ b/bazel/exporter/cmake_exporter_test.go
@@ -249,37 +249,6 @@
assert.Equal(t, expected, contents.String())
}
-func TestFindRule_RuleExists_Success(t *testing.T) {
- qr := analysis_v2.CqueryResult{}
- err := prototext.Unmarshal([]byte(textProto), &qr)
- require.NoError(t, err)
-
- r, err := findRule(&qr, "//src/apps:hello")
- require.NoError(t, err)
- require.NotNil(t, r)
- assert.Equal(t, "//src/apps:hello", r.GetName())
-}
-
-func TestFindRule_RuleDoesntExists_ReturnsError(t *testing.T) {
- qr := analysis_v2.CqueryResult{}
- err := prototext.Unmarshal([]byte(textProto), &qr)
- require.NoError(t, err)
-
- r, err := findRule(&qr, "//path/to:nonexistent_rule")
- assert.Error(t, err)
- assert.Nil(t, r)
-}
-
-func TestFindRule_InvalidRule_ReturnsError(t *testing.T) {
- qr := analysis_v2.CqueryResult{}
- err := prototext.Unmarshal([]byte(textProto), &qr)
- require.NoError(t, err)
-
- r, err := findRule(&qr, "")
- assert.Error(t, err)
- assert.Nil(t, r)
-}
-
func TestGetRuleCopts_CoptsExists_Success(t *testing.T) {
qr := analysis_v2.CqueryResult{}
err := prototext.Unmarshal([]byte(textProto), &qr)