From 8ac89346db2c07b3e6067e3a7a009bb1bff30d53 Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Tue, 3 May 2016 16:03:21 -0700 Subject: [PATCH] Fix codecgen * Make verify call update * Make update's topological sort not confused about the "io" package --- hack/update-codecgen.sh | 17 +++++--- hack/verify-codecgen.sh | 88 +++++++---------------------------------- 2 files changed, 26 insertions(+), 79 deletions(-) diff --git a/hack/update-codecgen.sh b/hack/update-codecgen.sh index a43c4d77a15..b8aff4a1b57 100755 --- a/hack/update-codecgen.sh +++ b/hack/update-codecgen.sh @@ -23,6 +23,9 @@ source "${KUBE_ROOT}/hack/lib/init.sh" kube::golang::setup_env +# The sort at the end makes sure we feed the topological sort a deterministic +# list (since there aren't many dependencies). + generated_files=($( find . -not \( \ \( \ @@ -34,7 +37,7 @@ generated_files=($( -o -wholename '*/Godeps/*' \ -o -wholename '*/codecgen-*-1234.generated.go' \ \) -prune \ - \) -name '*.generated.go')) + \) -name '*.generated.go' | sort -r)) # Register function to be called on EXIT to remove codecgen # binary and also to touch the files that should be regenerated @@ -63,13 +66,17 @@ function depends { file=${generated_files[$1]//\.generated\.go/.go} deps=$(go list -f "{{.Deps}}" ${file} | tr "[" " " | tr "]" " ") candidate=$(readlinkdashf "${generated_files[$2]//\.generated\.go/.go}") - result=false for dep in ${deps}; do - if [[ ${candidate} = *${dep} ]]; then - result=true + # Only look at dependencies within the kubernetes tree-- otherwise the "io" + # package matches the end of one of our directories. + if [[ ${dep} = "k8s.io"* ]]; then + if [[ ${candidate} = *${dep} ]]; then + echo true + return + fi fi done - echo ${result} + echo false } function tsort { diff --git a/hack/verify-codecgen.sh b/hack/verify-codecgen.sh index e9cbf4c8cf3..726a1de67e2 100755 --- a/hack/verify-codecgen.sh +++ b/hack/verify-codecgen.sh @@ -35,85 +35,25 @@ generated_files=($( \) -prune \ \) -name '*.generated.go')) -# create a nice clean place to put codecgen there -_tmpdir="$(mktemp -d -t codecgen.XXXXXX)" -function cleanup { - echo "Removing ${_tmpdir}" - rm -rf "${_tmpdir}" -} -trap cleanup EXIT - -# Sort all files in the dependency order. -number=${#generated_files[@]} -for (( i=0; i "${generated_file}.original" done -result="" -function depends { - file=${generated_files[$1]//\.generated\.go/.go} - deps=$(go list -f "{{.Deps}}" ${file} | tr "[" " " | tr "]" " ") - candidate=$(readlinkdashf "${generated_files[$2]//\.generated\.go/.go}") - result=false - for dep in ${deps}; do - if [[ ${candidate} = *${dep} ]]; then - result=true - fi - done - echo ${result} -} - -function tsort { - visited[$1]=true - local j=0 - for (( j=0; j /dev/null - base_file=$(basename "${file}") - base_generated_file=$(basename "${generated_file}") - # temporarily move the generated file to a non-go file so it doesn't influence the verify codecgen - mv "${base_generated_file}" "${base_generated_file}.bak" - # We use '-d 1234' flag to have a deterministic output every time. - # The constant was just randomly chosen. - ${CODECGEN} -d 1234 -o "${base_generated_file}.1tmp" "${base_file}" - # Add boilerplate at the beginning of the generated file. - sed 's/YEAR/2015/' "${initial_dir}/hack/boilerplate/boilerplate.go.txt" > "${base_generated_file}.tmp" - cat "${base_generated_file}.1tmp" >> "${base_generated_file}.tmp" - rm "${base_generated_file}.1tmp" - # restore the generated file - mv "${base_generated_file}.bak" "${base_generated_file}" - ret=0 - diff -Naupr -I 'Auto generated by' "${base_generated_file}" "${base_generated_file}.tmp" || ret=$? - if [[ $ret -eq 0 ]]; then +for generated_file in ${generated_files[@]}; do + cur=0 + diff -Naupr -I 'Auto generated by' "${generated_file}" "${generated_file}.original" || cur=$? + if [[ $cur -eq 0 ]]; then echo "${generated_file} up to date." else - echo "${generated_file} is out of date. Please run hack/update-codecgen.sh" - exit 1 + echo "${generated_file} was out of date. Please run hack/update-codecgen.sh. (If you're running locally, this was run for you already.)" + ret=1 fi - rm "${base_generated_file}.tmp" - popd > /dev/null + + rm -f "${generated_file}.original" done + +exit $ret