mirror of
https://github.com/golang/go.git
synced 2025-05-05 15:43:04 +00:00
refactor/rename: fix crash with "." as -from package
Cause: the absolute cwd, not ".", must be passed to build.Import. Also: simplify the lookup logic in findFromObjects, and handle nil gracefully. (No unit test---not worth faking os.Getwd.) Fixes issue #13866 Change-Id: I7e8eede55bc83d98e2ef5e42609c287e74c04501 Reviewed-on: https://go-review.googlesource.com/18453 Reviewed-by: Michael Matloob <matloob@golang.org>
This commit is contained in:
parent
1fb1f857ac
commit
e211dfb000
@ -116,9 +116,13 @@ func parseFromFlag(ctxt *build.Context, fromFlag string) (*spec, error) {
|
||||
spec.fromName = spec.searchFor
|
||||
}
|
||||
|
||||
cwd, err := os.Getwd()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Sanitize the package.
|
||||
// TODO(adonovan): test with relative packages. May need loader changes.
|
||||
bp, err := ctxt.Import(spec.pkg, ".", build.FindOnly)
|
||||
bp, err := ctxt.Import(spec.pkg, cwd, build.FindOnly)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("can't find package %q", spec.pkg)
|
||||
}
|
||||
@ -274,20 +278,23 @@ func findFromObjects(iprog *loader.Program, spec *spec) ([]types.Object, error)
|
||||
// for main packages, even though that's not an import path.
|
||||
// Seems like a bug.
|
||||
//
|
||||
// pkgObj := iprog.ImportMap[spec.pkg]
|
||||
// if pkgObj == nil {
|
||||
// pkg := iprog.ImportMap[spec.pkg]
|
||||
// if pkg == nil {
|
||||
// return fmt.Errorf("cannot find package %s", spec.pkg) // can't happen?
|
||||
// }
|
||||
// info := iprog.AllPackages[pkg]
|
||||
|
||||
// Workaround: lookup by value.
|
||||
var pkgObj *types.Package
|
||||
for pkg := range iprog.AllPackages {
|
||||
var info *loader.PackageInfo
|
||||
var pkg *types.Package
|
||||
for pkg, info = range iprog.AllPackages {
|
||||
if pkg.Path() == spec.pkg {
|
||||
pkgObj = pkg
|
||||
break
|
||||
}
|
||||
}
|
||||
info := iprog.AllPackages[pkgObj]
|
||||
if info == nil {
|
||||
return nil, fmt.Errorf("package %q was not loaded", spec.pkg)
|
||||
}
|
||||
|
||||
objects, err := findObjects(info, spec)
|
||||
if err != nil {
|
||||
|
@ -116,9 +116,13 @@ func parseFromFlag(ctxt *build.Context, fromFlag string) (*spec, error) {
|
||||
spec.fromName = spec.searchFor
|
||||
}
|
||||
|
||||
cwd, err := os.Getwd()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Sanitize the package.
|
||||
// TODO(adonovan): test with relative packages. May need loader changes.
|
||||
bp, err := ctxt.Import(spec.pkg, ".", build.FindOnly)
|
||||
bp, err := ctxt.Import(spec.pkg, cwd, build.FindOnly)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("can't find package %q", spec.pkg)
|
||||
}
|
||||
@ -274,20 +278,23 @@ func findFromObjects(iprog *loader.Program, spec *spec) ([]types.Object, error)
|
||||
// for main packages, even though that's not an import path.
|
||||
// Seems like a bug.
|
||||
//
|
||||
// pkgObj := iprog.ImportMap[spec.pkg]
|
||||
// if pkgObj == nil {
|
||||
// pkg := iprog.ImportMap[spec.pkg]
|
||||
// if pkg == nil {
|
||||
// return fmt.Errorf("cannot find package %s", spec.pkg) // can't happen?
|
||||
// }
|
||||
// info := iprog.AllPackages[pkg]
|
||||
|
||||
// Workaround: lookup by value.
|
||||
var pkgObj *types.Package
|
||||
for pkg := range iprog.AllPackages {
|
||||
var info *loader.PackageInfo
|
||||
var pkg *types.Package
|
||||
for pkg, info = range iprog.AllPackages {
|
||||
if pkg.Path() == spec.pkg {
|
||||
pkgObj = pkg
|
||||
break
|
||||
}
|
||||
}
|
||||
info := iprog.AllPackages[pkgObj]
|
||||
if info == nil {
|
||||
return nil, fmt.Errorf("package %q was not loaded", spec.pkg)
|
||||
}
|
||||
|
||||
objects, err := findObjects(info, spec)
|
||||
if err != nil {
|
||||
|
Loading…
x
Reference in New Issue
Block a user