Return a set of packages changed by RegisterTestRules
PiperOrigin-RevId: 264686314
diff --git a/ts_auto_deps/updater/test_register.go b/ts_auto_deps/updater/test_register.go
index 130e3d1..19529c9 100644
--- a/ts_auto_deps/updater/test_register.go
+++ b/ts_auto_deps/updater/test_register.go
@@ -38,11 +38,13 @@
// RegisterTestRules registers ts_library test targets with the project's
// ts_config and ts_development_sources rules. It may also register the tests
// with a testonly ts_library named "all_tests", which allows users to set up
-// their own BUILD layout. It's separated from UpdateBUILD since it's non-local,
-// multiple packages may all need to make writes to the same ts_config.
-func (upd *Updater) RegisterTestRules(ctx context.Context, paths ...string) (bool, error) {
+// their own BUILD layout. It's separated from UpdateBUILD since it's
+// non-local, multiple packages may all need to make writes to the same
+// ts_config. It returns a set of the paths for the packages that were updated.
+func (upd *Updater) RegisterTestRules(ctx context.Context, paths ...string) (bool, map[string]bool, error) {
reg := &buildRegistry{make(map[string]*build.File), make(map[*build.File]bool)}
var g3root string
+ updatedAncestorPackages := make(map[string]bool)
for _, path := range paths {
// declare variables manually so that g3root doesn't get overwritten by a :=
// declaration
@@ -50,11 +52,11 @@
var buildPath string
g3root, buildPath, err = getBUILDPath(ctx, path)
if err != nil {
- return false, err
+ return false, nil, err
}
bld, err := reg.readBUILD(ctx, g3root, buildPath)
if err != nil {
- return false, err
+ return false, nil, err
}
for _, tr := range getRules(bld, "ts_library", ruleTypeTest) {
// don't register all_test libraries themselves
@@ -63,14 +65,22 @@
}
platform.Infof("Registering test rule in closest ts_config & ts_development_sources")
target := AbsoluteBazelTarget(bld, tr.Name())
- if err := reg.registerTestRule(ctx, bld, tsConfig, g3root, target); err != nil {
- return false, err
+ ancestorBuild, err := reg.registerTestRule(ctx, bld, tsConfig, g3root, target)
+ if err != nil {
+ return false, nil, err
+ }
+ if ancestorBuild != "" {
+ updatedAncestorPackages[ancestorBuild] = true
}
// NodeJS rules should not be added to ts_development_sources automatically, because
// they typically do not run in the browser.
if tr.AttrString("runtime") != "nodejs" {
- if err := reg.registerTestRule(ctx, bld, tsDevSrcs, g3root, target); err != nil {
- return false, err
+ ancestorBuild, err := reg.registerTestRule(ctx, bld, tsDevSrcs, g3root, target)
+ if err != nil {
+ return false, nil, err
+ }
+ if ancestorBuild != "" {
+ updatedAncestorPackages[ancestorBuild] = true
}
}
}
@@ -81,12 +91,12 @@
fmt.Printf("Registered test(s) in %s\n", b.Path)
fileChanged, err := upd.maybeWriteBUILD(ctx, filepath.Join(g3root, b.Path), b)
if err != nil {
- return false, err
+ return false, nil, err
}
updated = updated || fileChanged
}
- return updated, nil
+ return updated, updatedAncestorPackages, nil
}
// buildRegistry buffers reads and writes done while registering ts_libraries
@@ -149,16 +159,16 @@
// rule is registered with it, instead of specified register target. Prints a
// warning if no rule is found, but only returns an error if adding the
// dependency fails.
-func (reg *buildRegistry) registerTestRule(ctx context.Context, bld *build.File, rt registerTarget, g3root, target string) error {
+func (reg *buildRegistry) registerTestRule(ctx context.Context, bld *build.File, rt registerTarget, g3root, target string) (string, error) {
if buildHasDisableTaze(bld) {
- return nil
+ return "", nil
}
var ruleToRegister *build.Rule
for _, r := range bld.Rules("") {
if isAllTestLibrary(bld, r) {
if hasDependency(bld, r, target) {
- return nil
+ return "", nil
}
// an all_tests library takes presidence over a registerTarget, and there
@@ -169,7 +179,7 @@
}
if ruleMatches(bld, r, rt.kind(), rt.ruleType()) {
if hasDependency(bld, r, target) {
- return nil
+ return "", nil
}
// keep overwriting ruleToRegister so the last match in the BUILD gets
@@ -181,7 +191,7 @@
if ruleToRegister != nil {
addDep(bld, ruleToRegister, target)
reg.registerForPossibleUpdate(bld)
- return nil
+ return filepath.Dir(bld.Path), nil
}
parentDir := filepath.Dir(filepath.Dir(bld.Path))
@@ -190,7 +200,7 @@
if _, err := platform.Stat(ctx, buildFile); err == nil {
parent, err := reg.readBUILD(ctx, g3root, buildFile)
if err != nil {
- return err
+ return "", err
}
return reg.registerTestRule(ctx, parent, rt, g3root, target)
}
@@ -198,5 +208,5 @@
}
fmt.Printf("WARNING: no %s rule in parent packages of %s to register with.\n",
rt.kind(), target)
- return nil
+ return "", nil
}