mirror of
https://github.com/golang/go.git
synced 2025-05-05 15:43:04 +00:00
cmd/gomvpkg: Only process paths that are children
When determining children of a parent directory, look for the expected / to avoid processing directories that look similar but are not direct descendants. Fixes golang/go#21991 Change-Id: I5c7d18076540e5588a856845f04645231856196f Reviewed-on: https://go-review.googlesource.com/65672 Reviewed-by: Michael Matloob <matloob@golang.org>
This commit is contained in:
parent
a5d79d28aa
commit
af2bfe26b6
@ -145,7 +145,9 @@ func subpackages(ctxt *build.Context, srcDir string, dir string) map[string]bool
|
||||
log.Fatalf("unexpected error in ForEachPackage: %v", err)
|
||||
}
|
||||
|
||||
if !strings.HasPrefix(pkg, path.Join(dir, "")) {
|
||||
// Only process the package or a sub-package
|
||||
if !(strings.HasPrefix(pkg, dir) &&
|
||||
(len(pkg) == len(dir) || pkg[len(dir)] == '/')) {
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -214,6 +214,23 @@ var _ a.T
|
||||
},
|
||||
},
|
||||
|
||||
// References into subpackages where directories have overlapped names
|
||||
{
|
||||
ctxt: fakeContext(map[string][]string{
|
||||
"foo": {},
|
||||
"foo/a": {`package a`},
|
||||
"foo/aa": {`package bar`},
|
||||
"foo/c": {`package c; import _ "foo/bar";`},
|
||||
}),
|
||||
from: "foo/a", to: "foo/spam",
|
||||
want: map[string]string{
|
||||
"/go/src/foo/spam/0.go": `package spam
|
||||
`,
|
||||
"/go/src/foo/aa/0.go": `package bar`,
|
||||
"/go/src/foo/c/0.go": `package c; import _ "foo/bar";`,
|
||||
},
|
||||
},
|
||||
|
||||
// External test packages
|
||||
{
|
||||
ctxt: buildutil.FakeContext(map[string]map[string]string{
|
||||
@ -398,11 +415,13 @@ var _ foo.T
|
||||
}
|
||||
moveDirectory = func(from, to string) error {
|
||||
for path, contents := range got {
|
||||
if strings.HasPrefix(path, from) {
|
||||
newPath := strings.Replace(path, from, to, 1)
|
||||
delete(got, path)
|
||||
got[newPath] = contents
|
||||
if !(strings.HasPrefix(path, from) &&
|
||||
(len(path) == len(from) || path[len(from)] == filepath.Separator)) {
|
||||
continue
|
||||
}
|
||||
newPath := strings.Replace(path, from, to, 1)
|
||||
delete(got, path)
|
||||
got[newPath] = contents
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user