Inline getBUILDPathAndBUILDFile.
Also move responsibility for determining the workspace-relative BUILD path from readBUILD to getBUILDPath.
PiperOrigin-RevId: 269361049
diff --git a/ts_auto_deps/updater/test_register.go b/ts_auto_deps/updater/test_register.go
index 19529c9..291e564 100644
--- a/ts_auto_deps/updater/test_register.go
+++ b/ts_auto_deps/updater/test_register.go
@@ -50,7 +50,7 @@
// declaration
var err error
var buildPath string
- g3root, buildPath, err = getBUILDPath(ctx, path)
+ g3root, buildPath, _, err = getBUILDPath(ctx, path)
if err != nil {
return false, nil, err
}
@@ -108,7 +108,7 @@
}
func (reg *buildRegistry) readBUILD(ctx context.Context, workspaceRoot, buildFilePath string) (*build.File, error) {
- normalizedG3Path, err := getAbsoluteBUILDPath(workspaceRoot, buildFilePath)
+ normalizedG3Path, err := getWorkspaceRelativePath(workspaceRoot, buildFilePath)
if err != nil {
return nil, err
}
@@ -117,7 +117,7 @@
return bld, nil
}
- bld, err := readBUILD(ctx, workspaceRoot, buildFilePath)
+ bld, err := readBUILD(ctx, buildFilePath, normalizedG3Path)
if err != nil {
return nil, err
}
diff --git a/ts_auto_deps/updater/updater.go b/ts_auto_deps/updater/updater.go
index e6585d2..f121c44 100644
--- a/ts_auto_deps/updater/updater.go
+++ b/ts_auto_deps/updater/updater.go
@@ -173,36 +173,18 @@
return done
}
-// getAbsoluteBUILDPath relativizes the absolute build path so that buildFilePath
-// is definitely below workspaceRoot.
-func getAbsoluteBUILDPath(workspaceRoot, buildFilePath string) (string, error) {
- absPath, err := filepath.Abs(buildFilePath)
- if err != nil {
- return "", err
- }
- g3Path, err := filepath.Rel(workspaceRoot, absPath)
- if err != nil {
- return "", err
- }
- return platform.Normalize(g3Path), nil
-}
-
// readBUILD loads the BUILD file, if present, or returns a new empty one.
-// workspaceRoot must be an absolute path and buildFilePath is interpreted as
-// relative to CWD, and must be underneath workspaceRoot.
-func readBUILD(ctx context.Context, workspaceRoot, buildFilePath string) (*build.File, error) {
- normalizedG3Path, err := getAbsoluteBUILDPath(workspaceRoot, buildFilePath)
- if err != nil {
- return nil, fmt.Errorf("failed to resolve workspace relative path: %s", err)
- }
+// buildFilePath is relative to CWD, and workspaceRelativePath is relative to
+// the workspace root (the directory containing the WORKSPACE file).
+func readBUILD(ctx context.Context, buildFilePath, workspaceRelativePath string) (*build.File, error) {
data, err := platform.ReadFile(ctx, buildFilePath)
if err != nil {
if os.IsNotExist(err) {
- return &build.File{Path: normalizedG3Path, Type: build.TypeBuild}, nil
+ return &build.File{Path: workspaceRelativePath, Type: build.TypeBuild}, nil
}
return nil, fmt.Errorf("reading %q: %s", buildFilePath, err)
}
- bld, err := build.ParseBuild(normalizedG3Path, data)
+ bld, err := build.ParseBuild(workspaceRelativePath, data)
if err != nil {
if parseErr, ok := err.(build.ParseError); ok {
return nil, &AnalysisFailedError{
@@ -487,33 +469,45 @@
return true, nil
}
-func getBUILDPath(ctx context.Context, path string) (string, string, error) {
- path = strings.TrimSuffix(path, "/BUILD") // Support both package paths and BUILD files
- if _, err := platform.Stat(ctx, path); os.IsNotExist(err) {
- return "", "", err
- }
- buildFilePath := filepath.Join(path, "BUILD")
- g3root, err := workspace.Root(buildFilePath)
+// getWorkspaceRelativePath takes a buildFilePath that's relative to the working
+// directory, and returns a path to the BUILD file that's relative to the
+// workspaceRoot (the absolute path of the directory containing the WORKSPACE
+// file).
+func getWorkspaceRelativePath(workspaceRoot, buildFilePath string) (string, error) {
+ absPath, err := filepath.Abs(buildFilePath)
if err != nil {
- return "", "", err
+ return "", err
}
+ workspaceRelativePath, err := filepath.Rel(workspaceRoot, absPath)
+ if err != nil {
+ return "", err
+ }
+ platform.Normalize(workspaceRelativePath)
- return g3root, buildFilePath, nil
+ return workspaceRelativePath, nil
}
-func getBUILDPathAndBUILDFile(ctx context.Context, path string) (string, string, *build.File, error) {
- g3root, buildFilePath, err := getBUILDPath(ctx, path)
+// getBUILDPath takes in a package or BUILD file path, and returns the path of
+// the workspace root (the absolute path of the directory containing the
+// WORKSPACE file), the BUILD file path relative to the working directory, and
+// the BUILD file path relative to the workspace root.
+func getBUILDPath(ctx context.Context, path string) (string, string, string, error) {
+ path = strings.TrimSuffix(path, "/BUILD") // Support both package paths and BUILD files
+ if _, err := platform.Stat(ctx, path); os.IsNotExist(err) {
+ return "", "", "", err
+ }
+ buildFilePath := filepath.Join(path, "BUILD")
+ workspaceRoot, err := workspace.Root(buildFilePath)
if err != nil {
- return "", "", nil, err
+ return "", "", "", err
}
- bld, err := readBUILD(ctx, g3root, buildFilePath)
+ workspaceRelativePath, err := getWorkspaceRelativePath(workspaceRoot, buildFilePath)
if err != nil {
- platform.Infof("Error reading building file!")
- return "", "", nil, err
+ return "", "", "", err
}
- return g3root, buildFilePath, bld, nil
+ return workspaceRoot, buildFilePath, workspaceRelativePath, nil
}
// isTazeDisabledInPackage checks the BUILD file, or if the BUILD doesn't exist,
@@ -652,11 +646,17 @@
// IsTazeDisabledForDir checks if ts_auto_deps is disabled in the BUILD file in the dir,
// or if no BUILD file exists, in the closest ancestor BUILD
func IsTazeDisabledForDir(ctx context.Context, dir string) (bool, error) {
- g3root, buildFilePath, bld, err := getBUILDPathAndBUILDFile(ctx, dir)
+ g3root, buildFilePath, workspaceRelativePath, err := getBUILDPath(ctx, dir)
if err != nil {
return false, err
}
+ bld, err := readBUILD(ctx, buildFilePath, workspaceRelativePath)
+ if err != nil {
+ platform.Infof("Error reading building file!")
+ return false, err
+ }
+
return isTazeDisabledInPackage(ctx, g3root, buildFilePath, bld), nil
}
@@ -703,12 +703,18 @@
latencyReport := &LatencyReport{}
start := time.Now()
- g3root, buildFilePath, bld, err := getBUILDPathAndBUILDFile(ctx, path)
- latencyReport.GetBUILD = time.Since(start)
+ g3root, buildFilePath, workspaceRelativePath, err := getBUILDPath(ctx, path)
if err != nil {
return false, nil, err
}
+ bld, err := readBUILD(ctx, buildFilePath, workspaceRelativePath)
+ if err != nil {
+ platform.Infof("Error reading building file!")
+ return false, nil, err
+ }
+ latencyReport.GetBUILD = time.Since(start)
+
start = time.Now()
ts_auto_depsDisabled := isTazeDisabledInPackage(ctx, g3root, buildFilePath, bld)
latencyReport.TazeDisabled = time.Since(start)
@@ -1194,7 +1200,7 @@
_, err := platform.Stat(ctx, buildPath)
var bld *build.File
if err == nil {
- bld, err = readBUILD(ctx, workspaceRoot, buildPath)
+ bld, err = readBUILD(ctx, buildPath, filepath.Join(packagePath, "BUILD"))
} else if os.IsNotExist(err) {
// Recursively search parent package and cache its location below if found.
bld, err = FindBUILDFile(ctx, pkgToBUILD, workspaceRoot, filepath.Dir(packagePath))
diff --git a/ts_auto_deps/updater/updater_test.go b/ts_auto_deps/updater/updater_test.go
index b62ef20..613b99f 100644
--- a/ts_auto_deps/updater/updater_test.go
+++ b/ts_auto_deps/updater/updater_test.go
@@ -37,7 +37,7 @@
if err != nil {
t.Fatal(err)
}
- bld, err := readBUILD(context.Background(), filepath.Join(testTmpDir, "google3"), p)
+ bld, err := readBUILD(context.Background(), p, "foo/bar/BUILD")
if err != nil {
t.Fatal(err)
}