1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
#!/usr/bin/env bash
SCRIPTS_DIR=$(dirname "$0")
source $SCRIPTS_DIR/common.sh
push $SCRIPTS_DIR/..
KVPROTO_ROOT=`pwd`
pop
PROGRAM=$(basename "$0")
GOPATH=$(go env GOPATH)
if [ -z $GOPATH ]; then
printf "Error: the environment variable GOPATH is not set, please set it before running %s\n" $PROGRAM > /dev/stderr
exit 1
fi
GO_PREFIX_PATH=github.com/pingcap/kvproto/pkg
export PATH=$KVPROTO_ROOT/_tools/bin:$GOPATH/bin:$PATH
echo "install tools..."
GO111MODULE=off go get github.com/twitchtv/retool
GO111MODULE=off retool sync || exit 1
function collect() {
file=$(basename $1)
base_name=$(basename $file ".proto")
mkdir -p ../pkg/$base_name
if [ -z $GO_OUT_M ]; then
GO_OUT_M="M$file=$GO_PREFIX_PATH/$base_name"
else
GO_OUT_M="$GO_OUT_M,M$file=$GO_PREFIX_PATH/$base_name"
fi
}
# Although eraftpb.proto is copying from raft-rs, however there is no
# official go code ship with the crate, so we need to generate it manually.
collect include/eraftpb.proto
collect include/rustproto.proto
cd proto
for file in `ls *.proto`
do
collect $file
done
echo "generate go code..."
ret=0
function gen() {
base_name=$(basename $1 ".proto")
protoc -I.:../include --grpc-gateway_out=logtostderr=true:../pkg/$base_name --gofast_out=plugins=grpc,$GO_OUT_M:../pkg/$base_name $1 || ret=$?
cd ../pkg/$base_name
sed_inplace -E 's/import _ \"gogoproto\"//g' *.pb*.go
sed_inplace -E 's/import fmt \"fmt\"//g' *.pb*.go
sed_inplace -E 's/import io \"io\"//g' *.pb*.go
sed_inplace -E 's/import math \"math\"//g' *.pb*.go
sed_inplace -E 's/import _ \".*rustproto\"//' *.pb*.go
goimports -w *.pb*.go
cd ../../proto
}
gen ../include/eraftpb.proto
for file in `ls *.proto`
do
gen $file
done
exit $ret
|