mirror of https://github.com/k3s-io/k3s
commit
ecb394a5e0
|
@ -23,7 +23,7 @@ source "${KUBE_ROOT}/hack/lib/init.sh"
|
|||
|
||||
kube::golang::setup_env
|
||||
|
||||
generated_files=$(
|
||||
generated_files=($(
|
||||
find . -not \( \
|
||||
\( \
|
||||
-wholename './output' \
|
||||
|
@ -33,7 +33,7 @@ generated_files=$(
|
|||
-o -wholename '*/third_party/*' \
|
||||
-o -wholename '*/Godeps/*' \
|
||||
\) -prune \
|
||||
\) -name '*.generated.go')
|
||||
\) -name '*.generated.go'))
|
||||
|
||||
# Build codecgen binary from Godeps.
|
||||
function cleanup {
|
||||
|
@ -41,6 +41,46 @@ function cleanup {
|
|||
}
|
||||
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"
|
||||
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
|
||||
# not required for the code to be compilable, we first remove
|
||||
# them and the regenerate them.
|
||||
for generated_file in ${generated_files}; do
|
||||
rm -f "${generated_file}"
|
||||
for (( i=0; i < number; i++ )); do
|
||||
rm -f "${generated_files[${i}]}"
|
||||
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}
|
||||
file=${generated_file//\.generated\.go/.go}
|
||||
# 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"
|
||||
cat "${base_generated_file}" >> "${base_generated_file}.tmp"
|
||||
mv "${base_generated_file}.tmp" "${base_generated_file}"
|
||||
echo "${generated_file} is regenerated."
|
||||
popd > /dev/null
|
||||
done
|
||||
|
|
|
@ -23,9 +23,7 @@ source "${KUBE_ROOT}/hack/lib/init.sh"
|
|||
|
||||
kube::golang::setup_env
|
||||
|
||||
cd "${KUBE_ROOT}"
|
||||
|
||||
generated_files=$(
|
||||
generated_files=($(
|
||||
find . -not \( \
|
||||
\( \
|
||||
-wholename './output' \
|
||||
|
@ -35,7 +33,7 @@ generated_files=$(
|
|||
-o -wholename '*/third_party/*' \
|
||||
-o -wholename '*/Godeps/*' \
|
||||
\) -prune \
|
||||
\) -name '*.generated.go')
|
||||
\) -name '*.generated.go'))
|
||||
|
||||
# create a nice clean place to put codecgen there
|
||||
_tmpdir="$(mktemp -d -t codecgen.XXXXXX)"
|
||||
|
@ -45,6 +43,46 @@ function cleanup {
|
|||
}
|
||||
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.
|
||||
# However, we need to install godep first.
|
||||
# We make some tricks with GOPATH variable to make it work with Travis.
|
||||
|
@ -58,7 +96,9 @@ export GOPATH=${_gopath}
|
|||
CODECGEN="${_tmpdir}/codecgen_binary"
|
||||
${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}
|
||||
file=${generated_file//\.generated\.go/.go}
|
||||
# codecgen work only if invoked from directory where the file
|
||||
|
|
Loading…
Reference in New Issue