Also print `fixed ...` messages with `-stdout` (#1373)
* Also print `fixed ...` messages with `-stdout`
This makes it easier for users to implement a "check only" mode that doesn't modify any files, but is able to tell which ones would have been changed by buildozer.
* Use diff
diff --git a/buildozer/buildozer_test.sh b/buildozer/buildozer_test.sh
index aba79c2..955c582 100755
--- a/buildozer/buildozer_test.sh
+++ b/buildozer/buildozer_test.sh
@@ -2393,4 +2393,34 @@
diff -u MODULE.bazel.expected MODULE.bazel || fail "Output didn't match"
}
+function test_stdout() {
+ cat > MODULE.bazel <<EOF
+module(
+ name = "foo", version = "0.27.0",
+)
+EOF
+
+ cat > MODULE.bazel.expected <<EOF
+module(
+ name = "foo", version = "0.27.0",
+)
+EOF
+
+ cat > MODULE.bazel.expected.stdout <<EOF
+module(
+ name = "foo",
+ version = "0.27.0",
+)
+EOF
+
+ cat > MODULE.bazel.expected.stderr <<EOF
+fixed $(pwd)/MODULE.bazel
+EOF
+
+ $buildozer -stdout 'format' //MODULE.bazel:all > stdout 2> stderr
+ diff -u MODULE.bazel.expected MODULE.bazel || fail "File was changed"
+ diff -u MODULE.bazel.expected.stdout stdout || fail "Output didn't match"
+ diff -u MODULE.bazel.expected.stderr stderr || fail "Error output didn't match"
+}
+
run_suite "buildozer tests"
diff --git a/edit/buildozer.go b/edit/buildozer.go
index b4ae487..5527d65 100644
--- a/edit/buildozer.go
+++ b/edit/buildozer.go
@@ -1260,7 +1260,7 @@
if opts.Stdout || name == stdinPackageName {
opts.OutWriter.Write(ndata)
- return &rewriteResult{file: name, errs: errs, records: records}
+ return &rewriteResult{file: name, errs: errs, modified: !bytes.Equal(data, ndata), records: records}
}
if bytes.Equal(data, ndata) {