diff options
-rw-r--r-- | PRESUBMIT.py | 22 | ||||
-rw-r--r-- | infra/bots/gen_tasks.go | 22 |
2 files changed, 40 insertions, 4 deletions
diff --git a/PRESUBMIT.py b/PRESUBMIT.py index 8115b497b6..4798a02d59 100644 --- a/PRESUBMIT.py +++ b/PRESUBMIT.py @@ -183,6 +183,24 @@ def _RecipeSimulationTest(input_api, output_api): '`%s` failed:\n%s' % (' '.join(cmd), e.output))) return results + +def _GenTasksTest(input_api, output_api): + """Run gen_tasks.go test.""" + results = [] + if not any(f.LocalPath().startswith('infra') + for f in input_api.AffectedFiles()): + return results + + gen_tasks = os.path.join('infra', 'bots', 'gen_tasks.go') + cmd = ['go', 'run', gen_tasks, '--test'] + try: + subprocess.check_output(cmd) + except subprocess.CalledProcessError as e: + results.append(output_api.PresubmitError( + '`%s` failed:\n%s' % (' '.join(cmd), e.output))) + return results + + def _CheckGNFormatted(input_api, output_api): """Make sure any .gn files we're changing have been formatted.""" results = [] @@ -234,8 +252,10 @@ def CheckChangeOnUpload(input_api, output_api): results = [] results.extend(_CommonChecks(input_api, output_api)) # Run on upload, not commit, since the presubmit bot apparently doesn't have - # coverage installed. + # coverage or Go installed. results.extend(_RecipeSimulationTest(input_api, output_api)) + results.extend(_GenTasksTest(input_api, output_api)) + results.extend(_CheckGNFormatted(input_api, output_api)) return results diff --git a/infra/bots/gen_tasks.go b/infra/bots/gen_tasks.go index 50af1b9444..0751124368 100644 --- a/infra/bots/gen_tasks.go +++ b/infra/bots/gen_tasks.go @@ -11,6 +11,7 @@ package main import ( "bytes" "encoding/json" + "flag" "fmt" "io/ioutil" "os" @@ -62,6 +63,9 @@ var ( // Path to the infra/bots directory. infrabotsDir = "" + + // Flags. + testing = flag.Bool("test", false, "Run in test mode: verify that the output hasn't changed.") ) // deriveCompileTaskName returns the name of a compile task based on the given @@ -492,7 +496,6 @@ func main() { } // Write the tasks.json file. - outFile := path.Join(root, specs.TASKS_CFG_FILE) b, err := json.MarshalIndent(cfg, "", " ") if err != nil { glog.Fatal(err) @@ -501,8 +504,21 @@ func main() { // much less readable. Replace the escape characters with the real // character. b = bytes.Replace(b, []byte("\\u003c"), []byte("<"), -1) - if err := ioutil.WriteFile(outFile, b, os.ModePerm); err != nil { - glog.Fatal(err) + + outFile := path.Join(root, specs.TASKS_CFG_FILE) + if *testing { + // Don't write the file; read it and compare. + expect, err := ioutil.ReadFile(outFile) + if err != nil { + glog.Fatal(err) + } + if !bytes.Equal(expect, b) { + glog.Fatalf("Expected no changes, but changes were found!") + } + } else { + if err := ioutil.WriteFile(outFile, b, os.ModePerm); err != nil { + glog.Fatal(err) + } } } |