Merge pull request #438 from klnusbaum/check_basedir_symlink
diff --git a/action/create.go b/action/create.go index 6b5abf8..b66257c 100644 --- a/action/create.go +++ b/action/create.go
@@ -101,7 +101,7 @@ n := strings.TrimPrefix(pa, vpath) root, subpkg := util.NormalizeName(n) - if !config.HasDependency(root) { + if !config.HasDependency(root) && root != config.Name { msg.Info("Found reference to %s\n", n) d := &cfg.Dependency{ Name: root, @@ -110,7 +110,7 @@ d.Subpackages = []string{subpkg} } config.Imports = append(config.Imports, d) - } else { + } else if config.HasDependency(root) { if len(subpkg) > 0 { subpkg = strings.TrimPrefix(subpkg, "/") d := config.Imports.Get(root)
diff --git a/dependency/resolver.go b/dependency/resolver.go index 92e10cb..300ca4d 100644 --- a/dependency/resolver.go +++ b/dependency/resolver.go
@@ -166,6 +166,13 @@ if err != nil { return nil, err } + + basedir, err = checkForBasedirSymlink(basedir) + + if err != nil { + return nil, err + } + vdir := filepath.Join(basedir, "vendor") buildContext, err := util.GetBuildContext() @@ -941,3 +948,20 @@ return true } + +// checkForBasedirSymlink checks to see if the given basedir is actually a +// symlink. In the case that it is a symlink, the symlink is read and returned. +// If the basedir is not a symlink, the provided basedir argument is simply +// returned back to the caller. +func checkForBasedirSymlink(basedir string) (string, error) { + fi, err := os.Lstat(basedir) + if err != nil { + return "", err + } + + if fi.Mode()&os.ModeSymlink != 0 { + return os.Readlink(basedir) + } + + return basedir, nil +}