|
|
@ -0,0 +1,55 @@ |
|
|
|
package main |
|
|
|
|
|
|
|
// +build ignore
|
|
|
|
|
|
|
|
import ( |
|
|
|
"bytes" |
|
|
|
"fmt" |
|
|
|
"io/ioutil" |
|
|
|
"os" |
|
|
|
"os/exec" |
|
|
|
"regexp" |
|
|
|
"strings" |
|
|
|
) |
|
|
|
|
|
|
|
// This script replaces most `[]byte` with `data.Bytes` in a `.pb.go` file.
|
|
|
|
// It was written before we realized we could use `gogo/protobuf` to achieve
|
|
|
|
// this more natively. So it's here for safe keeping in case we ever need to
|
|
|
|
// abandon `gogo/protobuf`.
|
|
|
|
|
|
|
|
func main() { |
|
|
|
bytePattern := regexp.MustCompile("[[][]]byte") |
|
|
|
const oldPath = "types/types.pb.go" |
|
|
|
const tmpPath = "types/types.pb.new" |
|
|
|
content, err := ioutil.ReadFile(oldPath) |
|
|
|
if err != nil { |
|
|
|
panic("cannot read " + oldPath) |
|
|
|
os.Exit(1) |
|
|
|
} |
|
|
|
lines := bytes.Split(content, []byte("\n")) |
|
|
|
outFile, _ := os.Create(tmpPath) |
|
|
|
wroteImport := false |
|
|
|
for _, line_bytes := range lines { |
|
|
|
line := string(line_bytes) |
|
|
|
gotPackageLine := strings.HasPrefix(line, "package ") |
|
|
|
writeImportTime := strings.HasPrefix(line, "import ") |
|
|
|
containsDescriptor := strings.Contains(line, "Descriptor") |
|
|
|
containsByteArray := strings.Contains(line, "[]byte") |
|
|
|
if containsByteArray && !containsDescriptor { |
|
|
|
line = string(bytePattern.ReplaceAll([]byte(line), []byte("data.Bytes"))) |
|
|
|
} |
|
|
|
if writeImportTime && !wroteImport { |
|
|
|
wroteImport = true |
|
|
|
fmt.Fprintf(outFile, "import \"github.com/tendermint/go-wire/data\"\n") |
|
|
|
|
|
|
|
} |
|
|
|
if gotPackageLine { |
|
|
|
fmt.Fprintf(outFile, "%s\n", "//nolint: gas") |
|
|
|
} |
|
|
|
fmt.Fprintf(outFile, "%s\n", line) |
|
|
|
} |
|
|
|
outFile.Close() |
|
|
|
os.Remove(oldPath) |
|
|
|
os.Rename(tmpPath, oldPath) |
|
|
|
exec.Command("goimports", "-w", oldPath) |
|
|
|
} |