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