Merge "Copy bazelrc files into the queryview workspace"
diff --git a/cmd/soong_build/queryview.go b/cmd/soong_build/queryview.go
index cd1d6fb..a876522 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 @@
 
 	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 @@
 	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 {