On 7/26/23 19:50, Eric Blake wrote:
Now that I've finished tweaking the generator to output
consistent Go
style, add a test that runs gofmt to flag places where we introduce
style regressions. As lining up columns in generated const() blocks
is trickier, for now I am making the test skip that by default (export
TEST_GOFMT_ALL=1 to see the difference).
A later patch may figure out how to do it in OCaml (two passes: one to
collect the maximum length of a name, the second to output columnar
data), or to include gofmt as part of the generation process (when
available), where a 'make dist' tarball will compile no matter what,
but only have correct formatting if the developer building the tarball
had gofmt installed.
Signed-off-by: Eric Blake <eblake(a)redhat.com>
---
golang/Makefile.am | 2 +-
golang/codestyle-tests.sh | 45 +++++++++++++++++++++++++++++++++++++++
2 files changed, 46 insertions(+), 1 deletion(-)
create mode 100755 golang/codestyle-tests.sh
diff --git a/golang/Makefile.am b/golang/Makefile.am
index fac65248..9201ed8e 100644
--- a/golang/Makefile.am
+++ b/golang/Makefile.am
@@ -98,7 +98,7 @@ TESTS_ENVIRONMENT = \
abs_top_srcdir=$(abs_top_srcdir) \
$(NULL)
LOG_COMPILER = $(top_builddir)/run
-TESTS = run-tests.sh
+TESTS = run-tests.sh codestyle-tests.sh
endif
diff --git a/golang/codestyle-tests.sh b/golang/codestyle-tests.sh
new file mode 100755
index 00000000..f4928fe5
--- /dev/null
+++ b/golang/codestyle-tests.sh
@@ -0,0 +1,45 @@
+#!/bin/bash -
+# nbd client library in userspace
+# Copyright Red Hat
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+. ../tests/functions.sh
+
+set -e
+set -x
+
+# Assume that 'gofmt' lives in the same place as 'go'
+GOFMT=${GOLANG}fmt
+
+requires $GOFMT --help
+
+rm -f codestyle-tests.out
+cleanup_fn rm -f codestyle-tests.out
+
+# Lining up generated = in const() in bindings.go is hard; to check
+# that file, export TEST_GOFMT_ALL=1 while running this test.
+if test x"$TEST_GOFMT_ALL" = x; then
+ exclude='-not -name bindings.go'
+else
+ exclude=
+fi
+
+$GOFMT -d $(find . -name "*.go" $exclude) > codestyle-tests.out
+if test -s codestyle-tests.out; then
+ echo 'FAIL: fix the following style errors' >&2
+ cat codestyle-tests.out >&2
+ exit 1
+fi
Looks good to me.
Reviewed-by: Laszlo Ersek <lersek(a)redhat.com>