From 6d51e731a629813805d6bf0afc254b19ddb0ba58 Mon Sep 17 00:00:00 2001 From: Cole Faust Date: Tue, 29 Nov 2022 12:45:43 -0800 Subject: [PATCH] Copy bazelrc files into the queryview workspace They are still read when using bazel with queryview, so they need to be in the workspace so that they can be found. Bug: 234449134 Test: m queryview && ./build/bazel/bin/bazel query --config=queryview //... Change-Id: I1f2187dffd5a0e6cfb44ebe0c6738fa9bbef509d --- cmd/soong_build/queryview.go | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/cmd/soong_build/queryview.go b/cmd/soong_build/queryview.go index cd1d6fb5d..a87652221 100644 --- a/cmd/soong_build/queryview.go +++ b/cmd/soong_build/queryview.go @@ -15,6 +15,7 @@ package main import ( + "io/fs" "io/ioutil" "os" "path/filepath" @@ -35,6 +36,11 @@ func createBazelWorkspace(ctx *bp2build.CodegenContext, outDir string) error { filesToWrite := bp2build.CreateBazelFiles(ctx.Config(), ruleShims, res.BuildDirToTargets(), ctx.Mode()) + bazelRcFiles, err2 := CopyBazelRcFiles() + if err2 != nil { + return err2 + } + filesToWrite = append(filesToWrite, bazelRcFiles...) for _, f := range filesToWrite { if err := writeReadOnlyFile(outDir, f); err != nil { return err @@ -44,6 +50,32 @@ func createBazelWorkspace(ctx *bp2build.CodegenContext, outDir string) error { return nil } +// CopyBazelRcFiles creates BazelFiles for all the bazelrc files under +// build/bazel. They're needed because the rc files are still read when running +// queryview, so they have to be in the queryview workspace. +func CopyBazelRcFiles() ([]bp2build.BazelFile, error) { + result := make([]bp2build.BazelFile, 0) + err := filepath.WalkDir(filepath.Join(topDir, "build/bazel"), func(path string, info fs.DirEntry, err error) error { + if filepath.Ext(path) == ".bazelrc" { + contents, err := os.ReadFile(path) + if err != nil { + return err + } + path, err = filepath.Rel(topDir, path) + if err != nil { + return err + } + result = append(result, bp2build.BazelFile{ + Dir: filepath.Dir(path), + Basename: filepath.Base(path), + Contents: string(contents), + }) + } + return nil + }) + return result, err +} + // The auto-conversion directory should be read-only, sufficient for bazel query. The files // are not intended to be edited by end users. func writeReadOnlyFile(dir string, f bp2build.BazelFile) error {