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
pull/564/head
Ismo Puustinen 2019-01-31 17:37:56 +02:00
parent fefdfc2ad7
commit c23c83724c
1 changed files with 85 additions and 64 deletions

View File

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