verify-generated-files-remake.sh: use strings instead of arrays.

Move away from arrays to strings to fix several shellcheck-reported
issues. It isn't useful to expand the found files into arrays, because
only things that are checked are if the array is empty or the contents
of the first array item.

Fix also a shellcheck issue about using a literal string as regexp
match. It appears that the original reason for using a regexp was to
avoid specifying the directory in which the script is run. However, due
to the need of calling 'make generated_files', the directory is fixed
anyway, and the regexp can be left out.

Testing the change can be done with the following script which emulates
the different cases which the script can see. In the output the variable
'X' is the array and 'Z' is the string.

  #!/bin/bash

  set -o errexit
  set -o nounset
  set -o pipefail

  function find_genfiles() {
      find .                         \
          \(                         \
            -not \(                  \
              \(                     \
                  -path ./_\* -o     \
                  -path ./.\*        \
              \) -prune              \
            \)                       \
          \) -name "$1"
  }

  # $1 = filename pattern as in "zz_generated.$1.go"
  # $2 timestamp file
  function newer() {
      find_genfiles "$1" | while read -r F; do
          if [[ "${F}" -nt "$2" ]]; then
              echo "${F}"
          fi
      done
  }

  STAMP=stamp

  mkdir -p xxx
  touch xxx/foobar

  touch "${STAMP}"

  mkdir -p foo
  touch foo/foobar

  mkdir -p bar
  touch bar/foobar

  # two newer files

  X=($(newer foobar "${STAMP}"))
  if [[ "${#X[*]}" != 0 ]]; then
      echo "X1:"
      echo "  ${X[*]:-(none)}"
  fi

  Z="$(newer foobar "${STAMP}")"
  if [[ -n "$Z" ]]; then
      echo "Z1:"
      echo "  ${Z}" | tr '\n' ' '
      echo ""
  fi

  # no newer files

  touch "${STAMP}"

  X=($(newer foobar "${STAMP}"))
  if [[ "${#X[*]}" != 0 ]]; then
      echo "X2:"
      echo "  ${X[*]:-(none)}"
  fi

  Z="$(newer foobar "${STAMP}")"
  if [[ -n "$Z" ]]; then
      echo "Z2:"
      echo "  ${Z}" | tr '\n' ' '
      echo ""
  fi

  # one newer file, name matches

  touch "${STAMP}"
  touch bar/foobar

  X=($(newer foobar "${STAMP}"))
  if [[ "${#X[@]}" != 1 || ! ( "${X[0]}" =~ "bar/foobar" ) ]]; then
      echo "X3:"
      echo "  ${X[*]:-(none)}"
  fi

  Z="$(newer foobar "${STAMP}")"
  if [[ -z "${Z}" || ${Z} != "./bar/foobar" ]]; then
      echo "Z3:"
      echo "  ${Z:-(none)}" | tr '\n' ' '
      echo ""
  fi

  # one newer file, name doesn't match

  touch "${STAMP}"
  touch foo/foobar

  X=($(newer foobar "${STAMP}"))
  if [[ "${#X[@]}" != 1 || ! ( "${X[0]}" =~ "bar/foobar" ) ]]; then
      echo "X4:"
      echo "  ${X[*]:-(none)}"
  fi

  Z="$(newer foobar "${STAMP}")"
  if [[ -z "${Z}" || ${Z} != "./bar/foobar" ]]; then
      echo "Z4:"
      echo "  ${Z:-(none)}" | tr '\n' ' '
      echo ""
  fi

The expected output from running this script:

X1:
  ./bar/foobar ./foo/foobar
Z1:
  ./bar/foobar ./foo/foobar
X4:
  ./foo/foobar
Z4:
  ./foo/foobar
This commit is contained in:
Ismo Puustinen 2019-01-31 17:37:56 +02:00
parent fefdfc2ad7
commit c23c83724c

View File

@ -73,10 +73,11 @@ function assert_clean() {
make generated_files >/dev/null make generated_files >/dev/null
touch "${STAMP}" touch "${STAMP}"
make generated_files >/dev/null make generated_files >/dev/null
X=($(newer deepcopy "${STAMP}")) X="$(newer deepcopy "${STAMP}")"
if [[ "${#X[*]}" != 0 ]]; then if [[ -n "${X}" ]]; then
echo "Generated files changed on back-to-back 'make' runs:" echo "Generated files changed on back-to-back 'make' runs:"
echo " ${X[*]:-(none)}" echo " ${X}" | tr '\n' ' '
echo ""
return 1 return 1
fi fi
true true
@ -91,25 +92,28 @@ STAMP=/tmp/stamp.$RANDOM
assert_clean assert_clean
DIR=staging/src/k8s.io/sample-apiserver/pkg/apis/wardle/v1alpha1 DIR=staging/src/k8s.io/sample-apiserver/pkg/apis/wardle/v1alpha1
touch "$DIR/types.go" touch "${DIR}/types.go"
touch "${STAMP}" touch "${STAMP}"
make generated_files >/dev/null make generated_files >/dev/null
X=($(newer deepcopy "${STAMP}")) X="$(newer deepcopy "${STAMP}")"
if [[ "${#X[*]}" != 1 || ! ( "${X[0]}" =~ "${DIR}/zz_generated.deepcopy.go" ) ]]; then if [[ -z "${X}" || ${X} != "./${DIR}/zz_generated.deepcopy.go" ]]; then
echo "Wrong generated deepcopy files changed after touching src file:" echo "Wrong generated deepcopy files changed after touching src file:"
echo " ${X[*]:-(none)}" echo " ${X:-(none)}" | tr '\n' ' '
echo ""
exit 1 exit 1
fi fi
X=($(newer defaults "${STAMP}")) X="$(newer defaults "${STAMP}")"
if [[ "${#X[*]}" != 1 || ! ( "${X[0]}" =~ "${DIR}/zz_generated.defaults.go" ) ]]; then if [[ -z "${X}" || ${X} != "./${DIR}/zz_generated.defaults.go" ]]; then
echo "Wrong generated defaults files changed after touching src file:" echo "Wrong generated defaults files changed after touching src file:"
echo " ${X[*]:-(none)}" echo " ${X:-(none)}" | tr '\n' ' '
echo ""
exit 1 exit 1
fi fi
X=($(newer conversion "${STAMP}")) X="$(newer conversion "${STAMP}")"
if [[ "${#X[*]}" != 1 || ! ( "${X[0]}" =~ "${DIR}/zz_generated.conversion.go" ) ]]; then if [[ -z "${X}" || ${X} != "./${DIR}/zz_generated.conversion.go" ]]; then
echo "Wrong generated conversion files changed after touching src file:" echo "Wrong generated conversion files changed after touching src file:"
echo " ${X[*]:-(none)}" echo " ${X:-(none)}" | tr '\n' ' '
echo ""
exit 1 exit 1
fi fi
@ -122,10 +126,11 @@ assert_clean
touch staging/src/k8s.io/code-generator/cmd/deepcopy-gen/main.go touch staging/src/k8s.io/code-generator/cmd/deepcopy-gen/main.go
touch "${STAMP}" touch "${STAMP}"
make generated_files >/dev/null make generated_files >/dev/null
X=($(older deepcopy "${STAMP}")) X="$(older deepcopy "${STAMP}")"
if [[ "${#X[*]}" != 0 ]]; then if [[ -n "${X}" ]]; then
echo "Generated deepcopy files did not change after touching code-generator file:" echo "Generated deepcopy files did not change after touching code-generator file:"
echo " ${X[*]:-(none)}" echo " ${X}" | tr '\n' ' '
echo ""
exit 1 exit 1
fi fi
@ -134,10 +139,11 @@ assert_clean
touch staging/src/k8s.io/code-generator/cmd/deepcopy-gen/ touch staging/src/k8s.io/code-generator/cmd/deepcopy-gen/
touch "${STAMP}" touch "${STAMP}"
make generated_files >/dev/null make generated_files >/dev/null
X=($(older deepcopy "${STAMP}")) X="$(older deepcopy "${STAMP}")"
if [[ "${#X[*]}" != 0 ]]; then if [[ -n "${X}" ]]; then
echo "Generated deepcopy files did not change after touching code-generator dir:" echo "Generated deepcopy files did not change after touching code-generator dir:"
echo " ${X[*]}:-(none)" echo " ${X}" | tr '\n' ' '
echo ""
exit 1 exit 1
fi fi
@ -146,10 +152,11 @@ assert_clean
touch vendor/k8s.io/gengo/examples/deepcopy-gen/generators/deepcopy.go touch vendor/k8s.io/gengo/examples/deepcopy-gen/generators/deepcopy.go
touch "${STAMP}" touch "${STAMP}"
make generated_files >/dev/null make generated_files >/dev/null
X=($(older deepcopy "${STAMP}")) X="$(older deepcopy "${STAMP}")"
if [[ "${#X[*]}" != 0 ]]; then if [[ -n "${X}" ]]; then
echo "Generated deepcopy files did not change after touching code-generator dep file:" echo "Generated deepcopy files did not change after touching code-generator dep file:"
echo " ${X[*]:-(none)}" echo " ${X}" | tr '\n' ' '
echo ""
exit 1 exit 1
fi fi
@ -158,10 +165,11 @@ assert_clean
touch vendor/k8s.io/gengo/examples/deepcopy-gen/generators/ touch vendor/k8s.io/gengo/examples/deepcopy-gen/generators/
touch "${STAMP}" touch "${STAMP}"
make generated_files >/dev/null make generated_files >/dev/null
X=($(older deepcopy "${STAMP}")) X="$(older deepcopy "${STAMP}")"
if [[ "${#X[*]}" != 0 ]]; then if [[ -n "${X}" ]]; then
echo "Generated deepcopy files did not change after touching code-generator dep dir:" echo "Generated deepcopy files did not change after touching code-generator dep dir:"
echo " ${X[*]:-(none)}" echo " ${X}" | tr '\n' ' '
echo ""
exit 1 exit 1
fi fi
@ -174,10 +182,11 @@ assert_clean
touch staging/src/k8s.io/code-generator/cmd/defaulter-gen/main.go touch staging/src/k8s.io/code-generator/cmd/defaulter-gen/main.go
touch "${STAMP}" touch "${STAMP}"
make generated_files >/dev/null make generated_files >/dev/null
X=($(older defaults "${STAMP}")) X="$(older defaults "${STAMP}")"
if [[ "${#X[*]}" != 0 ]]; then if [[ -n "${X}" ]]; then
echo "Generated defaults files did not change after touching code-generator file:" echo "Generated defaults files did not change after touching code-generator file:"
echo " ${X[*]:-(none)}" echo " ${X}" | tr '\n' ' '
echo ""
exit 1 exit 1
fi fi
@ -186,10 +195,11 @@ assert_clean
touch staging/src/k8s.io/code-generator/cmd/defaulter-gen/ touch staging/src/k8s.io/code-generator/cmd/defaulter-gen/
touch "${STAMP}" touch "${STAMP}"
make generated_files >/dev/null make generated_files >/dev/null
X=($(older defaults "${STAMP}")) X="$(older defaults "${STAMP}")"
if [[ "${#X[*]}" != 0 ]]; then if [[ -n "${X}" ]]; then
echo "Generated defaults files did not change after touching code-generator dir:" echo "Generated defaults files did not change after touching code-generator dir:"
echo " ${X[*]:-(none)}" echo " ${X}" | tr '\n' ' '
echo ""
exit 1 exit 1
fi fi
@ -198,10 +208,11 @@ assert_clean
touch vendor/k8s.io/gengo/examples/defaulter-gen/generators/defaulter.go touch vendor/k8s.io/gengo/examples/defaulter-gen/generators/defaulter.go
touch "${STAMP}" touch "${STAMP}"
make generated_files >/dev/null make generated_files >/dev/null
X=($(older defaults "${STAMP}")) X="$(older defaults "${STAMP}")"
if [[ "${#X[*]}" != 0 ]]; then if [[ -n "${X}" ]]; then
echo "Generated defaults files did not change after touching code-generator dep file:" echo "Generated defaults files did not change after touching code-generator dep file:"
echo " ${X[*]:-(none)}" echo " ${X}" | tr '\n' ' '
echo ""
exit 1 exit 1
fi fi
@ -210,10 +221,11 @@ assert_clean
touch vendor/k8s.io/gengo/examples/defaulter-gen/generators/ touch vendor/k8s.io/gengo/examples/defaulter-gen/generators/
touch "${STAMP}" touch "${STAMP}"
make generated_files >/dev/null make generated_files >/dev/null
X=($(older defaults "${STAMP}")) X="$(older defaults "${STAMP}")"
if [[ "${#X[*]}" != 0 ]]; then if [[ -n "${X}" ]]; then
echo "Generated defaults files did not change after touching code-generator dep dir:" echo "Generated defaults files did not change after touching code-generator dep dir:"
echo " ${X[*]:-(none)}" echo " ${X}" | tr '\n' ' '
echo ""
exit 1 exit 1
fi fi
@ -226,10 +238,11 @@ assert_clean
touch staging/src/k8s.io/code-generator/cmd/conversion-gen/main.go touch staging/src/k8s.io/code-generator/cmd/conversion-gen/main.go
touch "${STAMP}" touch "${STAMP}"
make generated_files >/dev/null make generated_files >/dev/null
X=($(older conversion "${STAMP}")) X="$(older conversion "${STAMP}")"
if [[ "${#X[*]}" != 0 ]]; then if [[ -n "${X}" ]]; then
echo "Generated conversion files did not change after touching code-generator file:" echo "Generated conversion files did not change after touching code-generator file:"
echo " ${X[*]:-(none)}" echo " ${X}" | tr '\n' ' '
echo ""
exit 1 exit 1
fi fi
@ -238,10 +251,11 @@ assert_clean
touch staging/src/k8s.io/code-generator/cmd/conversion-gen/ touch staging/src/k8s.io/code-generator/cmd/conversion-gen/
touch "${STAMP}" touch "${STAMP}"
make generated_files >/dev/null make generated_files >/dev/null
X=($(older conversion "${STAMP}")) X="$(older conversion "${STAMP}")"
if [[ "${#X[*]}" != 0 ]]; then if [[ -n "${X}" ]]; then
echo "Generated conversion files did not change after touching code-generator dir:" echo "Generated conversion files did not change after touching code-generator dir:"
echo " ${X[*]:-(none)}" echo " ${X}" | tr '\n' ' '
echo ""
exit 1 exit 1
fi fi
@ -250,10 +264,11 @@ assert_clean
touch vendor/k8s.io/code-generator/cmd/conversion-gen/generators/conversion.go touch vendor/k8s.io/code-generator/cmd/conversion-gen/generators/conversion.go
touch "${STAMP}" touch "${STAMP}"
make generated_files >/dev/null make generated_files >/dev/null
X=($(older conversion "${STAMP}")) X="$(older conversion "${STAMP}")"
if [[ "${#X[*]}" != 0 ]]; then if [[ -n "${X}" ]]; then
echo "Generated conversion files did not change after touching code-generator dep file:" echo "Generated conversion files did not change after touching code-generator dep file:"
echo " ${X[*]:-(none)}" echo " ${X}" | tr '\n' ' '
echo ""
exit 1 exit 1
fi fi
@ -262,10 +277,11 @@ assert_clean
touch vendor/k8s.io/code-generator/cmd/conversion-gen/generators/ touch vendor/k8s.io/code-generator/cmd/conversion-gen/generators/
touch "${STAMP}" touch "${STAMP}"
make generated_files >/dev/null make generated_files >/dev/null
X=($(older conversion "${STAMP}")) X="$(older conversion "${STAMP}")"
if [[ "${#X[*]}" != 0 ]]; then if [[ -n "${X}" ]]; then
echo "Generated conversion files did not change after touching code-generator dep dir:" echo "Generated conversion files did not change after touching code-generator dep dir:"
echo " ${X[*]:-(none)}" echo " ${X}" | tr '\n' ' '
echo ""
exit 1 exit 1
fi fi
@ -278,10 +294,11 @@ assert_clean
touch "staging/src/k8s.io/api/core/v1/types.go" touch "staging/src/k8s.io/api/core/v1/types.go"
touch "${STAMP}" touch "${STAMP}"
make generated_files >/dev/null make generated_files >/dev/null
X=($(newer openapi "${STAMP}")) X="$(newer openapi "${STAMP}")"
if [[ "${#X[*]}" != 1 || ! ( "${X[0]}" =~ "pkg/generated/openapi/zz_generated.openapi.go" ) ]]; then if [[ -z "${X}" || ${X} != "./pkg/generated/openapi/zz_generated.openapi.go" ]]; then
echo "Wrong generated openapi files changed after touching src file:" echo "Wrong generated openapi files changed after touching src file:"
echo "${X[*]:-(none)}" echo " ${X:-(none)}" | tr '\n' ' '
echo ""
exit 1 exit 1
fi fi
@ -294,10 +311,11 @@ assert_clean
touch vendor/k8s.io/kube-openapi/cmd/openapi-gen/openapi-gen.go touch vendor/k8s.io/kube-openapi/cmd/openapi-gen/openapi-gen.go
touch "${STAMP}" touch "${STAMP}"
make generated_files >/dev/null make generated_files >/dev/null
X=($(older openapi "${STAMP}")) X="$(older openapi "${STAMP}")"
if [[ "${#X[*]}" != 0 ]]; then if [[ -n "${X}" ]]; then
echo "Generated openapi files did not change after touching code-generator file:" echo "Generated openapi files did not change after touching code-generator file:"
echo " ${X[*]:-(none)}" echo " ${X}" | tr '\n' ' '
echo ""
exit 1 exit 1
fi fi
@ -306,10 +324,11 @@ assert_clean
touch vendor/k8s.io/kube-openapi/cmd/openapi-gen/ touch vendor/k8s.io/kube-openapi/cmd/openapi-gen/
touch "${STAMP}" touch "${STAMP}"
make generated_files >/dev/null make generated_files >/dev/null
X=($(older openapi "${STAMP}")) X="$(older openapi "${STAMP}")"
if [[ "${#X[*]}" != 0 ]]; then if [[ -n "${X}" ]]; then
echo "Generated openapi files did not change after touching code-generator dir:" echo "Generated openapi files did not change after touching code-generator dir:"
echo " ${X[*]:-(none)}" echo " ${X}" | tr '\n' ' '
echo ""
exit 1 exit 1
fi fi
@ -318,10 +337,11 @@ assert_clean
touch vendor/k8s.io/kube-openapi/pkg/generators/openapi.go touch vendor/k8s.io/kube-openapi/pkg/generators/openapi.go
touch "${STAMP}" touch "${STAMP}"
make generated_files >/dev/null make generated_files >/dev/null
X=($(older openapi "${STAMP}")) X="$(older openapi "${STAMP}")"
if [[ "${#X[*]}" != 0 ]]; then if [[ -n "${X}" ]]; then
echo "Generated openapi files did not change after touching code-generator dep file:" echo "Generated openapi files did not change after touching code-generator dep file:"
echo " ${X[*]:-(none)}" echo " ${X}" | tr '\n' ' '
echo ""
exit 1 exit 1
fi fi
@ -330,9 +350,10 @@ assert_clean
touch vendor/k8s.io/kube-openapi/pkg/generators touch vendor/k8s.io/kube-openapi/pkg/generators
touch "${STAMP}" touch "${STAMP}"
make generated_files >/dev/null make generated_files >/dev/null
X=($(older openapi "${STAMP}")) X="$(older openapi "${STAMP}")"
if [[ "${#X[*]}" != 0 ]]; then if [[ -n "${X}" ]]; then
echo "Generated openapi files did not change after touching code-generator dep dir:" echo "Generated openapi files did not change after touching code-generator dep dir:"
echo " ${X[*]:-(none)}" echo " ${X}" | tr '\n' ' '
echo ""
exit 1 exit 1
fi fi