Merge pull request #49216 from sttts/sttts-fix-ugorji-staging-tsort

Automatic merge from submit-queue

update-codecgen.sh: support staging dirs in tsort logic

Fixes #48984.
This commit is contained in:
Kubernetes Submit Queue 2017-07-20 09:07:55 -07:00 committed by GitHub
commit e1a2cf0178

View File

@ -27,9 +27,6 @@ kube::golang::setup_env
# list (since there aren't many dependencies). # list (since there aren't many dependencies).
generated_files=($( generated_files=($(
find ./vendor/k8s.io/api/ \
-name '*.generated.go' | LC_ALL=C sort -r
find . -not \( \ find . -not \( \
\( \ \( \
-wholename './output' \ -wholename './output' \
@ -43,36 +40,35 @@ generated_files=($(
\) -prune \ \) -prune \
\) -name '*.generated.go' | LC_ALL=C sort -r \) -name '*.generated.go' | LC_ALL=C sort -r
find ./vendor/k8s.io/kube-aggregator/ -not \( \ find ./staging/src -not \( \
\( \ \( \
-wholename './output' \ -wholename './output' \
-o -wholename './_output' \ -o -wholename './_output' \
-o -wholename './staging' \
-o -wholename './release' \ -o -wholename './release' \
-o -wholename './target' \ -o -wholename './target' \
-o -wholename '*/third_party/*' \ -o -wholename '*/third_party/*' \
-o -wholename '*/codecgen-*-1234.generated.go' \ -o -wholename '*/codecgen-*-1234.generated.go' \
\) -prune \ \) -prune \
\) -name '*.generated.go' | LC_ALL=C sort -r \) -name '*.generated.go' | sed 's,staging/src,vendor,' | LC_ALL=C sort -r
find ./vendor/k8s.io/metrics/ \
-name '*.generated.go' | LC_ALL=C sort -r
find ./vendor/k8s.io/apiserver/ -not \( \
\( \
-wholename './output' \
-o -wholename './_output' \
-o -wholename './staging' \
-o -wholename './release' \
-o -wholename './target' \
-o -wholename '*/third_party/*' \
-o -wholename '*/codecgen-*-1234.generated.go' \
\) -prune \
\) -name '*.generated.go' | LC_ALL=C sort -r
)) ))
number=${#generated_files[@]}
###for f in $(echo "${generated_files[@]}" | LC_ALL=C sort); do
### echo "DBG: generated_files: $f"
###done
# We only work for deps within this prefix. function package () {
my_prefix="k8s.io/kubernetes" dirname "${1}" | sed 's,\./,k8s.io/kubernetes/,'
}
# extract package list we care about.
dep_packages=($(
for f in "${generated_files[@]}"; do
package "${f}"
done | LC_ALL=C sort -u
))
###for f in $(echo "${dep_packages[@]}"); do
### echo "DBG: dep_packages: $f"
###done
# Register function to be called on EXIT to remove codecgen # Register function to be called on EXIT to remove codecgen
# binary and also to touch the files that should be regenerated # binary and also to touch the files that should be regenerated
@ -81,8 +77,8 @@ my_prefix="k8s.io/kubernetes"
function cleanup { function cleanup {
rm -f "${CODECGEN:-}" rm -f "${CODECGEN:-}"
pushd "${KUBE_ROOT}" > /dev/null pushd "${KUBE_ROOT}" > /dev/null
for (( i=0; i < number; i++ )); do for f in "${generated_files[@]}"; do
touch "${generated_files[${i}]}" || true touch "${f}" || true
done done
popd > /dev/null popd > /dev/null
} }
@ -90,23 +86,19 @@ trap cleanup EXIT
# Precompute dependencies for all directories. # Precompute dependencies for all directories.
# Then sort all files in the dependency order. # Then sort all files in the dependency order.
number=${#generated_files[@]}
result="" result=""
dep_packages_grep_pattern=$(echo ${dep_packages[@]} | tr " " '|')
###echo "DBG: dep_packages_grep_pattern: ${dep_packages_grep_pattern}"
for (( i=0; i<number; i++ )); do for (( i=0; i<number; i++ )); do
visited[${i}]=false visited[${i}]=false
file="${generated_files[${i}]/\.generated\.go/.go}" file="${generated_files[${i}]/\.generated\.go/.go}"
deps[${i}]=$(go list -f '{{range .Deps}}{{.}}{{"\n"}}{{end}}' ${file} | grep "^${my_prefix}") deps[${i}]=$(go list -f '{{range .Deps}}{{.}}{{"\n"}}{{end}}' ${file} | grep -Eow "^\\(${dep_packages_grep_pattern}\\)\$" | tr $"\n" ' ' || true)
###echo "DBG: deps[$file]: ${deps[$i]}"
done done
###echo "DBG: found $number generated files"
###for f in $(echo "${generated_files[@]}" | LC_ALL=C sort); do
### echo "DBG: $f"
###done
# NOTE: depends function assumes that the whole repository is under
# $my_prefix - it will NOT work if that is not true.
function depends { function depends {
rhs="$(dirname ${generated_files[$2]/#./${my_prefix}})" rhs="$(package ${generated_files[$2]})"
###echo "DBG: does ${file} depend on ${rhs}?" ####echo "DBG: does generated_files[$1] depend on ${rhs}?"
for dep in ${deps[$1]}; do for dep in ${deps[$1]}; do
###echo "DBG: checking against $dep" ###echo "DBG: checking against $dep"
if [[ "${dep}" == "${rhs}" ]]; then if [[ "${dep}" == "${rhs}" ]]; then