Re-enable source code scanning on up/get.
diff --git a/cmd/flatten.go b/cmd/flatten.go
index 652b522..d24fd54 100644
--- a/cmd/flatten.go
+++ b/cmd/flatten.go
@@ -7,6 +7,7 @@
 	"strings"
 
 	"github.com/Masterminds/cookoo"
+	"github.com/Masterminds/glide/util"
 	"github.com/Masterminds/glide/yaml"
 	"github.com/Masterminds/semver"
 )
@@ -55,7 +56,10 @@
 
 	f := &flattening{conf, vend, vend, deps, packages}
 
-	err := recFlatten(f, force, home, cache, cacheGopath, skipGopath)
+	// The assumption here is that once something has been scanned once in a
+	// run, there is no need to scan it again.
+	scanned := map[string]bool{}
+	err := recFlatten(f, force, home, cache, cacheGopath, skipGopath, scanned)
 	if err != nil {
 		return conf, err
 	}
@@ -99,7 +103,7 @@
 var updateCache = map[string]bool{}
 
 // refFlatten recursively flattens the vendor tree.
-func recFlatten(f *flattening, force bool, home string, cache, cacheGopath, skipGopath bool) error {
+func recFlatten(f *flattening, force bool, home string, cache, cacheGopath, skipGopath bool, scanned map[string]bool) error {
 	Debug("---> Inspecting %s for changes (%d packages).\n", f.curr, len(f.scan))
 	for _, imp := range f.scan {
 		Debug("----> Scanning %s", imp)
@@ -113,9 +117,11 @@
 			mod = m
 		} else if m, ok = mergeGb(base, imp, f.deps, f.top); ok {
 			mod = m
-		} else if m, ok = mergeGuess(base, imp, f.deps, f.top); ok {
+		} else if m, ok = mergeGuess(base, imp, f.deps, f.top, scanned); ok {
 			mod = m
 		}
+		//mod, _ = mergeGuess(base, imp, f.deps, f.top, scanned)
+		//Info("Scanned: %v", scanned)
 
 		if len(mod) > 0 {
 			Debug("----> Updating all dependencies for %q (%d)", imp, len(mod))
@@ -126,7 +132,7 @@
 				curr: base,
 				deps: f.deps,
 				scan: mod}
-			recFlatten(f2, force, home, cache, cacheGopath, skipGopath)
+			recFlatten(f2, force, home, cache, cacheGopath, skipGopath, scanned)
 		}
 	}
 
@@ -254,59 +260,67 @@
 // This always returns true because it always handles the job of searching
 // for dependencies. So generally it should be the last merge strategy
 // that you try.
-func mergeGuess(dir, pkg string, deps map[string]*yaml.Dependency, vend string) ([]string, bool) {
-	/*
-			Info("Scanning %s for dependencies.", pkg)
-			buildContext, err := GetBuildContext()
-			if err != nil {
-				Warn("Could not scan package %q: %s", pkg, err)
-				return []string{}, false
-			}
+func mergeGuess(dir, pkg string, deps map[string]*yaml.Dependency, vend string, scanned map[string]bool) ([]string, bool) {
+	Info("Scanning %s for dependencies.", pkg)
+	buildContext, err := GetBuildContext()
+	if err != nil {
+		Warn("Could not scan package %q: %s", pkg, err)
+		return []string{}, false
+	}
 
-			res := []string{}
+	res := []string{}
 
-			if _, err := os.Stat(dir); err != nil {
-				Warn("Directory is missing: %s", dir)
-				return res, true
-			}
-
-			d := walkDeps(buildContext, dir, pkg)
-			for _, name := range d {
-				name, _ := NormalizeName(name)
-				repo := getRepoRootFromPackage(name)
-				if _, ok := deps[name]; ok {
-					Debug("====> Seen %s already. Skipping", name)
-					continue
-				}
-
-				found := findPkg(buildContext, name, dir)
-				switch found.PType {
-				case ptypeUnknown:
-					Debug("✨☆ Undownloaded dependency: %s", name)
-					nd := &Dependency{
-						Name:       name,
-						Repository: "https://" + repo,
-					}
-					deps[name] = nd
-					res = append(res, name)
-				case ptypeGoroot, ptypeCgo:
-					break
-				default:
-					// We're looking for dependencies that might exist in $GOPATH
-					// but not be on vendor. We add any that are on $GOPATH.
-					if _, ok := deps[name]; !ok {
-						Debug("✨☆ GOPATH dependency: %s", name)
-						nd := &Dependency{Name: name}
-						deps[name] = nd
-						res = append(res, name)
-					}
-				}
-			}
-
+	if _, err := os.Stat(dir); err != nil {
+		Warn("Directory is missing: %s", dir)
 		return res, true
-	*/
-	Info("Package %s manages its own dependencies", pkg)
-	return []string{}, true
+	}
+
+	d := walkDeps(buildContext, dir, pkg)
+	for _, oname := range d {
+		if _, ok := scanned[oname]; ok {
+			//Info("===> Scanned %s already. Skipping", name)
+			continue
+		}
+		Info("=> Scanning %s", oname)
+		name, _ := NormalizeName(oname)
+		//if _, ok := deps[name]; ok {
+		//scanned[oname] = true
+		//Debug("====> Seen %s already. Skipping", name)
+		//continue
+		//}
+
+		repo := util.GetRootFromPackage(name)
+		found := findPkg(buildContext, name, dir)
+		switch found.PType {
+		case ptypeUnknown:
+			Info("==> Unknown %s (%s)", name, oname)
+			Debug("✨☆ Undownloaded dependency: %s", name)
+			nd := &yaml.Dependency{
+				Name:       name,
+				Repository: "https://" + repo,
+			}
+			deps[name] = nd
+			res = append(res, name)
+		case ptypeGoroot, ptypeCgo:
+			scanned[oname] = true
+			// Why do we break rather than continue?
+			break
+		default:
+			// We're looking for dependencies that might exist in $GOPATH
+			// but not be on vendor. We add any that are on $GOPATH.
+			if _, ok := deps[name]; !ok {
+				Debug("✨☆ GOPATH dependency: %s", name)
+				nd := &yaml.Dependency{Name: name}
+				deps[name] = nd
+				res = append(res, name)
+			}
+			scanned[oname] = true
+		}
+	}
+
+	return res, true
+	//Info("Package %s manages its own dependencies", pkg)
+	//return []string{}, true
 }
 
 // mergeDeps merges any dependency array into deps.
diff --git a/cmd/tree.go b/cmd/tree.go
index b521641..8983c4a 100644
--- a/cmd/tree.go
+++ b/cmd/tree.go
@@ -223,7 +223,11 @@
 
 		pkg, err := b.ImportDir(path, 0)
 		if err != nil {
-			return err
+			if !strings.HasPrefix(err.Error(), "no buildable Go source") {
+				Warn("Error: %s (%s)", err, path)
+				// Not sure if we should return here.
+				//return err
+			}
 		}
 
 		if pkg.Goroot {
diff --git a/cmd/update_references.go b/cmd/update_references.go
index c81a95c..3e602fa 100644
--- a/cmd/update_references.go
+++ b/cmd/update_references.go
@@ -70,6 +70,7 @@
 
 func discoverDependencyTree(f *flattening) error {
 	Debug("---> Inspecting %s for dependencies (%d packages).\n", f.curr, len(f.scan))
+	scanned := map[string]bool{}
 	for _, imp := range f.scan {
 		Debug("----> Scanning %s", imp)
 		base := path.Join(f.top, imp)
@@ -82,7 +83,7 @@
 			mod = m
 		} else if m, ok = mergeGb(base, imp, f.deps, f.top); ok {
 			mod = m
-		} else if m, ok = mergeGuess(base, imp, f.deps, f.top); ok {
+		} else if m, ok = mergeGuess(base, imp, f.deps, f.top, scanned); ok {
 			mod = m
 		}