From a5f2f2e84bb6334a35f9e2d73b5e2ac74d92c45d Mon Sep 17 00:00:00 2001 From: Richard Lincoln Date: Sun, 4 Feb 2018 13:46:35 +0100 Subject: [PATCH] #536: Using importPath to set package name rather than package path. --- .../descriptor/registry.go | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/protoc-gen-grpc-gateway/descriptor/registry.go b/protoc-gen-grpc-gateway/descriptor/registry.go index 61d6eb9bc74..d810140e000 100644 --- a/protoc-gen-grpc-gateway/descriptor/registry.go +++ b/protoc-gen-grpc-gateway/descriptor/registry.go @@ -61,7 +61,7 @@ func (r *Registry) Load(req *plugin.CodeGeneratorRequest) error { if target == nil { return fmt.Errorf("no such file: %s", name) } - name := packageIdentityName(target.FileDescriptorProto) + name := r.packageIdentityName(target.FileDescriptorProto) if targetPkg == "" { targetPkg = name } else { @@ -83,7 +83,7 @@ func (r *Registry) Load(req *plugin.CodeGeneratorRequest) error { func (r *Registry) loadFile(file *descriptor.FileDescriptorProto) { pkg := GoPackage{ Path: r.goPackagePath(file), - Name: defaultGoPackageName(file), + Name: r.defaultGoPackageName(file), } if err := r.ReserveGoPackageAlias(pkg.Name, pkg.Path); err != nil { for i := 0; ; i++ { @@ -247,9 +247,6 @@ func (r *Registry) goPackagePath(f *descriptor.FileDescriptorProto) string { } gopkg := f.Options.GetGoPackage() - if len(gopkg) == 0 { - gopkg = r.importPath - } idx := strings.LastIndex(gopkg, "/") if idx >= 0 { if sc := strings.LastIndex(gopkg, ";"); sc > 0 { @@ -295,15 +292,21 @@ func sanitizePackageName(pkgName string) string { // defaultGoPackageName returns the default go package name to be used for go files generated from "f". // You might need to use an unique alias for the package when you import it. Use ReserveGoPackageAlias to get a unique alias. -func defaultGoPackageName(f *descriptor.FileDescriptorProto) string { - name := packageIdentityName(f) +func (r *Registry) defaultGoPackageName(f *descriptor.FileDescriptorProto) string { + name := r.packageIdentityName(f) return sanitizePackageName(name) } // packageIdentityName returns the identity of packages. // protoc-gen-grpc-gateway rejects CodeGenerationRequests which contains more than one packages // as protoc-gen-go does. -func packageIdentityName(f *descriptor.FileDescriptorProto) string { +func (r *Registry) packageIdentityName(f *descriptor.FileDescriptorProto) string { + if p := r.importPath; len(p) != 0 { + if i := strings.LastIndex(p, "/"); i >= 0 { + p = p[i+1:] + } + return p + } if f.Options != nil && f.Options.GoPackage != nil { gopkg := f.Options.GetGoPackage() idx := strings.LastIndex(gopkg, "/")