Fix unstable hack/update-codecgen.sh output
This commit is contained in:
parent
f64780d6eb
commit
2e9da5e65b
@ -23,7 +23,7 @@ source "${KUBE_ROOT}/hack/lib/init.sh"
|
|||||||
|
|
||||||
kube::golang::setup_env
|
kube::golang::setup_env
|
||||||
|
|
||||||
generated_files=$(
|
generated_files=($(
|
||||||
find . -not \( \
|
find . -not \( \
|
||||||
\( \
|
\( \
|
||||||
-wholename './output' \
|
-wholename './output' \
|
||||||
@ -33,7 +33,7 @@ generated_files=$(
|
|||||||
-o -wholename '*/third_party/*' \
|
-o -wholename '*/third_party/*' \
|
||||||
-o -wholename '*/Godeps/*' \
|
-o -wholename '*/Godeps/*' \
|
||||||
\) -prune \
|
\) -prune \
|
||||||
\) -name '*.generated.go')
|
\) -name '*.generated.go'))
|
||||||
|
|
||||||
# Build codecgen binary from Godeps.
|
# Build codecgen binary from Godeps.
|
||||||
function cleanup {
|
function cleanup {
|
||||||
@ -41,6 +41,46 @@ function cleanup {
|
|||||||
}
|
}
|
||||||
trap cleanup EXIT
|
trap cleanup EXIT
|
||||||
|
|
||||||
|
# Sort all files in the dependency order.
|
||||||
|
number=${#generated_files[@]}
|
||||||
|
for (( i=0; i<number; i++ )); do
|
||||||
|
visited[${i}]=false
|
||||||
|
done
|
||||||
|
result=""
|
||||||
|
|
||||||
|
function depends {
|
||||||
|
file=${generated_files[$1]//\.generated\.go/.go}
|
||||||
|
deps=$(go list -f "{{.Deps}}" ${file} | tr "[" " " | tr "]" " ")
|
||||||
|
fullpath=$(readlink -f ${generated_files[$2]//\.generated\.go/.go})
|
||||||
|
candidate=$(dirname "${fullpath}")
|
||||||
|
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<number; j++ )); do
|
||||||
|
if ! ${visited[${j}]}; then
|
||||||
|
if $(depends "$1" ${j}); then
|
||||||
|
tsort $j
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
result="${result} $1"
|
||||||
|
}
|
||||||
|
for (( i=0; i<number; i++ )); do
|
||||||
|
if ! ${visited[${i}]}; then
|
||||||
|
tsort ${i}
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
index=(${result})
|
||||||
|
|
||||||
CODECGEN="${PWD}/codecgen_binary"
|
CODECGEN="${PWD}/codecgen_binary"
|
||||||
godep go build -o "${CODECGEN}" github.com/ugorji/go/codec/codecgen
|
godep go build -o "${CODECGEN}" github.com/ugorji/go/codec/codecgen
|
||||||
|
|
||||||
@ -48,11 +88,13 @@ godep go build -o "${CODECGEN}" github.com/ugorji/go/codec/codecgen
|
|||||||
# Thus (since all the files are completely auto-generated and
|
# Thus (since all the files are completely auto-generated and
|
||||||
# not required for the code to be compilable, we first remove
|
# not required for the code to be compilable, we first remove
|
||||||
# them and the regenerate them.
|
# them and the regenerate them.
|
||||||
for generated_file in ${generated_files}; do
|
for (( i=0; i < number; i++ )); do
|
||||||
rm -f "${generated_file}"
|
rm -f "${generated_files[${i}]}"
|
||||||
done
|
done
|
||||||
|
|
||||||
for generated_file in ${generated_files}; do
|
# Generate files in the dependency order.
|
||||||
|
for current in "${index[@]}"; do
|
||||||
|
generated_file=${generated_files[${current}]}
|
||||||
initial_dir=${PWD}
|
initial_dir=${PWD}
|
||||||
file=${generated_file//\.generated\.go/.go}
|
file=${generated_file//\.generated\.go/.go}
|
||||||
# codecgen work only if invoked from directory where the file
|
# codecgen work only if invoked from directory where the file
|
||||||
@ -67,5 +109,6 @@ for generated_file in ${generated_files}; do
|
|||||||
sed 's/YEAR/2015/' "${initial_dir}/hack/boilerplate/boilerplate.go.txt" > "${base_generated_file}.tmp"
|
sed 's/YEAR/2015/' "${initial_dir}/hack/boilerplate/boilerplate.go.txt" > "${base_generated_file}.tmp"
|
||||||
cat "${base_generated_file}" >> "${base_generated_file}.tmp"
|
cat "${base_generated_file}" >> "${base_generated_file}.tmp"
|
||||||
mv "${base_generated_file}.tmp" "${base_generated_file}"
|
mv "${base_generated_file}.tmp" "${base_generated_file}"
|
||||||
|
echo "${generated_file} is regenerated."
|
||||||
popd > /dev/null
|
popd > /dev/null
|
||||||
done
|
done
|
||||||
|
@ -23,9 +23,7 @@ source "${KUBE_ROOT}/hack/lib/init.sh"
|
|||||||
|
|
||||||
kube::golang::setup_env
|
kube::golang::setup_env
|
||||||
|
|
||||||
cd "${KUBE_ROOT}"
|
generated_files=($(
|
||||||
|
|
||||||
generated_files=$(
|
|
||||||
find . -not \( \
|
find . -not \( \
|
||||||
\( \
|
\( \
|
||||||
-wholename './output' \
|
-wholename './output' \
|
||||||
@ -35,7 +33,7 @@ generated_files=$(
|
|||||||
-o -wholename '*/third_party/*' \
|
-o -wholename '*/third_party/*' \
|
||||||
-o -wholename '*/Godeps/*' \
|
-o -wholename '*/Godeps/*' \
|
||||||
\) -prune \
|
\) -prune \
|
||||||
\) -name '*.generated.go')
|
\) -name '*.generated.go'))
|
||||||
|
|
||||||
# create a nice clean place to put codecgen there
|
# create a nice clean place to put codecgen there
|
||||||
_tmpdir="$(mktemp -d -t codecgen.XXXXXX)"
|
_tmpdir="$(mktemp -d -t codecgen.XXXXXX)"
|
||||||
@ -45,6 +43,46 @@ function cleanup {
|
|||||||
}
|
}
|
||||||
trap cleanup EXIT
|
trap cleanup EXIT
|
||||||
|
|
||||||
|
# Sort all files in the dependency order.
|
||||||
|
number=${#generated_files[@]}
|
||||||
|
for (( i=0; i<number; i++ )); do
|
||||||
|
visited[${i}]=false
|
||||||
|
done
|
||||||
|
result=""
|
||||||
|
|
||||||
|
function depends {
|
||||||
|
file=${generated_files[$1]//\.generated\.go/.go}
|
||||||
|
deps=$(go list -f "{{.Deps}}" ${file} | tr "[" " " | tr "]" " ")
|
||||||
|
fullpath=$(readlink -f ${generated_files[$2]//\.generated\.go/.go})
|
||||||
|
candidate=$(dirname "${fullpath}")
|
||||||
|
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<number; j++ )); do
|
||||||
|
if ! ${visited[${j}]}; then
|
||||||
|
if $(depends "$1" ${j}); then
|
||||||
|
tsort $j
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
result="${result} $1"
|
||||||
|
}
|
||||||
|
for (( i=0; i<number; i++ )); do
|
||||||
|
if ! ${visited[${i}]}; then
|
||||||
|
tsort ${i}
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
index=(${result})
|
||||||
|
|
||||||
# Build codecgen from Godeps.
|
# Build codecgen from Godeps.
|
||||||
# However, we need to install godep first.
|
# However, we need to install godep first.
|
||||||
# We make some tricks with GOPATH variable to make it work with Travis.
|
# We make some tricks with GOPATH variable to make it work with Travis.
|
||||||
@ -58,7 +96,9 @@ export GOPATH=${_gopath}
|
|||||||
CODECGEN="${_tmpdir}/codecgen_binary"
|
CODECGEN="${_tmpdir}/codecgen_binary"
|
||||||
${GODEP} go build -o "${CODECGEN}" github.com/ugorji/go/codec/codecgen
|
${GODEP} go build -o "${CODECGEN}" github.com/ugorji/go/codec/codecgen
|
||||||
|
|
||||||
for generated_file in ${generated_files}; do
|
# Generate files in the dependency order.
|
||||||
|
for current in ${index[@]}; do
|
||||||
|
generated_file=${generated_files[${current}]}
|
||||||
initial_dir=${PWD}
|
initial_dir=${PWD}
|
||||||
file=${generated_file//\.generated\.go/.go}
|
file=${generated_file//\.generated\.go/.go}
|
||||||
# codecgen work only if invoked from directory where the file
|
# codecgen work only if invoked from directory where the file
|
||||||
|
Loading…
Reference in New Issue
Block a user