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)
 	}
