Commit f76eaeb2 authored by David Symonds's avatar David Symonds

cmd/go/internal/get: more efficient path prefix checking code

Splitting the string is unnecessary.

Change-Id: I02796cb91602c1b9bf22721b985cd41b18cc92f2
Reviewed-on: https://go-review.googlesource.com/119936
Run-TryBot: David Symonds <dsymonds@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarRob Pike <r@golang.org>
parent a1addf15
......@@ -903,16 +903,16 @@ type metaImport struct {
Prefix, VCS, RepoRoot string
}
func splitPathHasPrefix(path, prefix []string) bool {
if len(path) < len(prefix) {
// pathPrefix reports whether sub is a prefix of s,
// only considering entire path components.
func pathPrefix(s, sub string) bool {
// strings.HasPrefix is necessary but not sufficient.
if !strings.HasPrefix(s, sub) {
return false
}
for i, p := range prefix {
if path[i] != p {
return false
}
}
return true
// The remainder after the prefix must either be empty or start with a slash.
rem := s[len(sub):]
return rem == "" || rem[0] == '/'
}
// A ImportMismatchError is returned where metaImport/s are present
......@@ -935,13 +935,10 @@ func (m ImportMismatchError) Error() string {
// errNoMatch is returned if none match.
func matchGoImport(imports []metaImport, importPath string) (metaImport, error) {
match := -1
imp := strings.Split(importPath, "/")
errImportMismatch := ImportMismatchError{importPath: importPath}
for i, im := range imports {
pre := strings.Split(im.Prefix, "/")
if !splitPathHasPrefix(imp, pre) {
if !pathPrefix(importPath, im.Prefix) {
errImportMismatch.mismatches = append(errImportMismatch.mismatches, im.Prefix)
continue
}
......
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