Commit 98f14998 authored by Dmitry Mozzherin's avatar Dmitry Mozzherin
Browse files

fix #41 parse multiple files via Stdin

parent f11672fe
Pipeline #45833244 passed with stages
in 7 minutes and 47 seconds
......@@ -2,9 +2,12 @@
## Unreleased
## [v0.7.2]
- Add [#41]: parse/clean multiple names from standard input.
## [v0.7.1]
- Add [#40]: add names with missing parenthesis for combination authors
- Add [#40]: add names with missing parenthesis for combination authors.
- Fix: remove typo for Scala parser URL on the parser webpage.
## [v0.7.0]
......@@ -45,11 +48,13 @@
This document follows [changelog guidelines]
[v0.7.2]: https://gitlab.com/gogna/gnparser/compare/v0.7.1...v0.7.2
[v0.7.1]: https://gitlab.com/gogna/gnparser/compare/v0.7.0...v0.7.1
[v0.7.0]: https://gitlab.com/gogna/gnparser/compare/v0.6.0...v0.7.0
[v0.6.0]: https://gitlab.com/gogna/gnparser/compare/v0.5.1...v0.6.0
[v0.5.1]: https://gitlab.com/gogna/gnparser/tree/v0.5.1
[#41]: https://gitlab.com/gogna/gnparser/issues/41
[#40]: https://gitlab.com/gogna/gnparser/issues/40
[#39]: https://gitlab.com/gogna/gnparser/issues/39
[#38]: https://gitlab.com/gogna/gnparser/issues/38
......
......@@ -227,7 +227,7 @@ gnparser -f pretty "Parus major Linnaeus, 1788"
# simple pipe-delimited flat format
gnparser -f simple "Parus major Linnaeus, 1788"
# to parse name from standard input
# to parse a name from standard input
echo "Parus major Linnaeus, 1788" | gnparser
```
......@@ -243,6 +243,12 @@ will be directed to STDERR.
```bash
gnparser -j 200 names.txt > names_parsed.txt
# to parse files using pipes
cat names.txt | gnparser -f simple -j 200 > names_parsed.txt
# to clean names from html tags and entities first, then parse
cat names.txt | gnparser -c | sed "s/.*|//" | gnparser > names_parsed.txt
```
To parse a file returning results in the same order as they are given (slower):
......@@ -270,6 +276,9 @@ To cleanup a file of names
```bash
gnparser -j 200 -c names.txt > no_html_names.txt
# using pipes
cat names.txt | gnparser -c -j 200 > no_html_names.txt
```
If you have data that has names with tags or HTML entities, the ``--cleanup
......
......@@ -23,7 +23,7 @@ package cmd
import (
"bufio"
"fmt"
"io/ioutil"
"io"
"log"
"os"
"strings"
......@@ -52,8 +52,14 @@ gnparser "Homo sapiens Linnaeus 1753" [flags]
To parse many names from a file (one name per line):
gnparser names.txt [flags] > parsed_names.txt
To clean names from html tags and entities
gnparser names.txt -c > cleanded_names.txt
To start gRPC parsing service on port 3355 with 10 concurrent jobs:
gnparser -j 10 -g 3355
To start web service on port 8080 with 5 concurrent jobs:
gnparser -j 5 -g 8080
`,
// Uncomment the following line if your bare application
......@@ -86,6 +92,10 @@ gnparser -j 10 -g 3355
gnparser.WorkersNum(wn),
gnparser.Format(f),
}
if len(args) == 0 {
processStdin(cmd, cleanup, wn, opts)
os.Exit(0)
}
data := getInput(cmd, args)
if cleanup {
cleanupData(data, wn)
......@@ -107,18 +117,18 @@ func Execute() {
func init() {
gnp := gnparser.NewGNparser()
rootCmd.PersistentFlags().BoolP("version", "v", false, "Show build version and date, ignores other flags.")
rootCmd.PersistentFlags().BoolP("version", "v", false, "shows build version and date, ignores other flags.")
df := gnp.OutputFormat()
formats := strings.Join(gnparser.AvailableFormats(), ", ")
formatHelp := fmt.Sprintf("Output format. Can be one of:\n %s", formats)
formatHelp := fmt.Sprintf("sets output format. Can be one of:\n %s.", formats)
rootCmd.Flags().StringP("format", "f", df, formatHelp)
dj := gnp.WorkersNum()
rootCmd.Flags().IntP("jobs", "j", dj,
"Nubmer of threads to run. CPU's threads number is the default.")
"nubmer of threads to run. CPU's threads number is the default.")
rootCmd.Flags().BoolP("cleanup", "c", false, "removes HTML entities, tags etc instead of parsing.")
rootCmd.Flags().BoolP("cleanup", "c", false, "removes HTML entities and tags instead of parsing.")
rootCmd.Flags().IntP("grpc_port", "g", 0, "starts gRPC server on the port.")
......@@ -186,6 +196,19 @@ func workersNumFlag(cmd *cobra.Command) int {
return i
}
func processStdin(cmd *cobra.Command, cleanup bool, wn int,
opts []gnparser.Option) {
if !checkStdin() {
cmd.Help()
return
}
if cleanup {
cleanupFile(os.Stdin, wn)
return
}
parseFile(os.Stdin, opts)
}
func checkStdin() bool {
stdInFile := os.Stdin
stat, err := stdInFile.Stat()
......@@ -198,20 +221,8 @@ func checkStdin() bool {
func getInput(cmd *cobra.Command, args []string) string {
var data string
switch len(args) {
case 0:
if !checkStdin() {
cmd.Help()
os.Exit(0)
}
bs, err := ioutil.ReadAll(os.Stdin)
if err != nil {
log.Println(err)
}
data = string(bs)
case 1:
data = args[0]
case 2:
data = args[1]
default:
cmd.Help()
os.Exit(0)
......@@ -224,7 +235,13 @@ func parse(data string, opts []gnparser.Option) {
path := string(data)
if fileExists(path) {
parseFile(path, opts)
f, err := os.OpenFile(path, os.O_RDONLY, os.ModePerm)
if err != nil {
log.Fatal(err)
os.Exit(1)
}
parseFile(f, opts)
f.Close()
} else {
parseString(gnp, data)
}
......@@ -239,20 +256,13 @@ func fileExists(path string) bool {
return false
}
func parseFile(path string, opts []gnparser.Option) {
func parseFile(f io.Reader, opts []gnparser.Option) {
in := make(chan string)
out := make(chan *gnparser.ParseResult)
gnp := gnparser.NewGNparser(opts...)
var wg sync.WaitGroup
wg.Add(1)
f, err := os.OpenFile(path, os.O_RDONLY, os.ModePerm)
if err != nil {
log.Fatal(err)
os.Exit(1)
}
defer f.Close()
go gnp.ParseStream(in, out, opts...)
go processResults(out, &wg)
sc := bufio.NewScanner(f)
......@@ -291,26 +301,25 @@ func parseString(gnp gnparser.GNparser, data string) {
func cleanupData(data string, wc int) {
path := string(data)
if fileExists(path) {
cleanupFile(path, wc)
f, err := os.OpenFile(path, os.O_RDONLY, os.ModePerm)
if err != nil {
log.Fatal(err)
os.Exit(1)
}
cleanupFile(f, wc)
f.Close()
} else {
res := preprocess.StripTags(data)
fmt.Println(data + "|" + res)
}
}
func cleanupFile(path string, wn int) {
func cleanupFile(f io.Reader, wn int) {
in := make(chan string)
out := make(chan string)
var wg sync.WaitGroup
wg.Add(1)
f, err := os.OpenFile(path, os.O_RDONLY, os.ModePerm)
if err != nil {
log.Fatal(err)
os.Exit(1)
}
defer f.Close()
go preprocess.CleanupStream(in, out, wn)
go processCleanup(out, &wg)
sc := bufio.NewScanner(f)
......
......@@ -3,7 +3,7 @@ module gitlab.com/gogna/gnparser
require (
cloud.google.com/go v0.35.1 // indirect
dmitri.shuralyov.com/app/changes v0.0.0-20181114035150-5af16e21babb // indirect
dmitri.shuralyov.com/service/change v0.0.0-20190127173012-184eb3bb42b2 // indirect
dmitri.shuralyov.com/service/change v0.0.0-20190130035545-6cc139383561 // indirect
git.apache.org/thrift.git v0.12.0 // indirect
github.com/Shopify/sarama v1.20.1 // indirect
github.com/coreos/go-systemd v0.0.0-20181031085051-9002847aa142 // indirect
......@@ -31,9 +31,9 @@ require (
github.com/pointlander/compress v1.1.0 // indirect
github.com/pointlander/jetset v1.0.0 // indirect
github.com/pointlander/peg v1.0.1-0.20181228211923-fa48cc294fa1 // indirect
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f // indirect
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 // indirect
github.com/prometheus/common v0.2.0 // indirect
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1 // indirect
github.com/prometheus/procfs v0.0.0-20190129233650-316cf8ccfec5 // indirect
github.com/russross/blackfriday v2.0.0+incompatible // indirect
github.com/shurcooL/go v0.0.0-20190121191506-3fef8c783dec // indirect
github.com/shurcooL/gofontwoff v0.0.0-20181114050219-180f79e6909d // indirect
......@@ -57,16 +57,16 @@ require (
github.com/stretchr/testify v1.3.0 // indirect
go.opencensus.io v0.19.0 // indirect
go4.org v0.0.0-20181109185143-00e24f1b2599 // indirect
golang.org/x/build v0.0.0-20190128191652-269e03abe74b // indirect
golang.org/x/crypto v0.0.0-20190128193316-c7b33c32a30b // indirect
golang.org/x/build v0.0.0-20190201181641-63986c177d1f // indirect
golang.org/x/crypto v0.0.0-20190131182504-b8fe1690c613 // indirect
golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2 // indirect
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3
golang.org/x/oauth2 v0.0.0-20190115181402-5dab4167f31c // indirect
golang.org/x/oauth2 v0.0.0-20190130055435-99b60b757ec1 // indirect
golang.org/x/perf v0.0.0-20190124201629-844a5f5b46f4 // indirect
golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc // indirect
golang.org/x/sys v0.0.0-20190201152629-afcc84fd7533 // indirect
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2
golang.org/x/tools v0.0.0-20190128232029-0a99049195af // indirect
google.golang.org/genproto v0.0.0-20190128161407-8ac453e89fca // indirect
golang.org/x/tools v0.0.0-20190201185910-0e05534988fe // indirect
google.golang.org/genproto v0.0.0-20190201180003-4b09977fb922 // indirect
google.golang.org/grpc v1.18.0
honnef.co/go/tools v0.0.0-20190128043916-71123fcbb8fe // indirect
sourcegraph.com/sqs/pbtypes v1.0.0 // indirect
......
......@@ -10,6 +10,7 @@ dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1
dmitri.shuralyov.com/service/change v0.0.0-20190119025054-42f2f11cf6af/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4=
dmitri.shuralyov.com/service/change v0.0.0-20190124041518-7c09d163af9b/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4=
dmitri.shuralyov.com/service/change v0.0.0-20190127173012-184eb3bb42b2/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4=
dmitri.shuralyov.com/service/change v0.0.0-20190130035545-6cc139383561/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4=
dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU=
git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg=
git.apache.org/thrift.git v0.0.0-20181218151757-9b75e4fe745a/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg=
......@@ -148,6 +149,7 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP
github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/common v0.0.0-20181218105931-67670fe90761/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
......@@ -158,6 +160,8 @@ github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190129224605-0e558783f66d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190129233650-316cf8ccfec5/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/russross/blackfriday v2.0.0+incompatible/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
......@@ -240,12 +244,17 @@ golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+
golang.org/x/build v0.0.0-20190118222844-a865ae32defd/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw=
golang.org/x/build v0.0.0-20190124033707-36bd60da6b75/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw=
golang.org/x/build v0.0.0-20190128191652-269e03abe74b/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw=
golang.org/x/build v0.0.0-20190129203959-bace88d50da9/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw=
golang.org/x/build v0.0.0-20190201181641-63986c177d1f/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190122013713-64072686203f/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190128193316-c7b33c32a30b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190129200851-54b0dbbbf449/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190129210102-ccddf3741a0c/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190131182504-b8fe1690c613/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190123073158-f1c91bc264ca/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
......@@ -274,6 +283,7 @@ golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAG
golang.org/x/oauth2 v0.0.0-20181120190819-8f65e3013eba/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190115181402-5dab4167f31c/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190130055435-99b60b757ec1/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw=
golang.org/x/perf v0.0.0-20190124201629-844a5f5b46f4/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
......@@ -302,6 +312,8 @@ golang.org/x/sys v0.0.0-20190124100055-b90733256f2e h1:3GIlrlVLfkoipSReOMNAgApI0
golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc h1:WiYx1rIFmx8c0mXAFtv5D/mHyKe1+jmuP7PViuwqwuQ=
golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190201152629-afcc84fd7533 h1:bLfqnzrpeG4usq5OvMCrwTdmMJ6aTmlCuo1eKl0mhkI=
golang.org/x/sys v0.0.0-20190201152629-afcc84fd7533/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2 h1:z99zHgr7hKfrUcX/KsoJk5FJfjTceCKIp96+biqP4To=
......@@ -325,6 +337,10 @@ golang.org/x/tools v0.0.0-20190124004107-78ee07aa9465 h1:z1zWb2F6a0UkU9Kyl0B4+xI
golang.org/x/tools v0.0.0-20190124004107-78ee07aa9465/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190128232029-0a99049195af h1:Wx+ooEDVfYpFCdHW8plwPeyrPPbRdlgc6mdqeW/IUAE=
golang.org/x/tools v0.0.0-20190128232029-0a99049195af/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190129211623-9cefa6771f8f h1:p5Ix23pmuyAFeCZgmZFjMXVU7aPCk33NrG3hniiL2IM=
golang.org/x/tools v0.0.0-20190129211623-9cefa6771f8f/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190201185910-0e05534988fe h1:vnIBlz9Fwms9Qgql2K0Ar+XatQxNe3xuRwzm4XtKZJ8=
golang.org/x/tools v0.0.0-20190201185910-0e05534988fe/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
google.golang.org/api v0.0.0-20181220000619-583d854617af/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
......@@ -345,6 +361,8 @@ google.golang.org/genproto v0.0.0-20190123001331-8819c946db44 h1:9u28q5XSBq/QWKR
google.golang.org/genproto v0.0.0-20190123001331-8819c946db44/go.mod h1:L3J43x8/uS+qIUoksaLKe6OS3nUKxOKuIFz1sl2/jx4=
google.golang.org/genproto v0.0.0-20190128161407-8ac453e89fca h1:L1odPN6KVjhk0Lbg41BKcjGjP7ELTvh/qDcyh6hEfv0=
google.golang.org/genproto v0.0.0-20190128161407-8ac453e89fca/go.mod h1:L3J43x8/uS+qIUoksaLKe6OS3nUKxOKuIFz1sl2/jx4=
google.golang.org/genproto v0.0.0-20190201180003-4b09977fb922 h1:mBVYJnbrXLA/ZCBTCe7PtEgAUP+1bg92qTaFoPHdz+8=
google.golang.org/genproto v0.0.0-20190201180003-4b09977fb922/go.mod h1:L3J43x8/uS+qIUoksaLKe6OS3nUKxOKuIFz1sl2/jx4=
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio=
google.golang.org/grpc v1.17.0 h1:TRJYBgMclJvGYn2rIMjj+h9KtMt5r1Ij7ODVRIZkwhk=
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment