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
+}