Add toggle to switch to full resolver, improved output.
diff --git a/dependency/resolver.go b/dependency/resolver.go
index 9e279c2..77f1c9a 100644
--- a/dependency/resolver.go
+++ b/dependency/resolver.go
@@ -116,15 +116,21 @@
 type Resolver struct {
 	Handler        MissingPackageHandler
 	VersionHandler VersionHandler
-	basedir        string
 	VendorDir      string
 	BuildContext   *util.BuildCtxt
-	seen           map[string]bool
 	Config         *cfg.Config
 
+	// ResolveAllFiles toggles deep scanning.
+	// If this is true, resolve by scanning all files, not by walking the
+	// import tree.
+	ResolveAllFiles bool
+
 	// Items already in the queue.
 	alreadyQ map[string]bool
 
+	basedir string
+	seen    map[string]bool
+
 	// findCache caches hits from Find. This reduces the number of filesystem
 	// touches that have to be done for dependency resolution.
 	findCache map[string]*PkgInfo
@@ -186,7 +192,11 @@
 	//msg.Debug("Scanning %s", target)
 	l := list.New()
 	l.PushBack(target)
-	//return r.resolveList(l)
+
+	// In this mode, walk the entire tree.
+	if r.ResolveAllFiles {
+		return r.resolveList(l)
+	}
 	return r.resolveImports(l)
 }
 
@@ -253,7 +263,9 @@
 	}
 
 	if deep {
-		//return r.resolveList(l)
+		if r.ResolveAllFiles {
+			return r.resolveList(l)
+		}
 		return r.resolveImports(l)
 	}
 
@@ -290,7 +302,9 @@
 		queue.PushBack(l)
 	}
 
-	//return r.resolveList(queue)
+	if r.ResolveAllFiles {
+		return r.resolveList(queue)
+	}
 	return r.resolveImports(queue)
 }
 
@@ -330,9 +344,6 @@
 		}
 		r.VersionHandler.Process(dep)
 
-		// FIXME: mattfarina, where do we need to put the VersionHandler.SetVersion
-		// call in this particular pattern?
-
 		// Here, we want to import the package and see what imports it has.
 		msg.Debug("Trying to open %s", vdep)
 		pkg, err := r.BuildContext.ImportDir(vdep, 0)
@@ -343,11 +354,6 @@
 				continue
 			}
 			if ok, err := r.Handler.NotFound(dep); ok {
-				//if _, ok := r.alreadyQ[dep]; ok {
-				//// This was already processed, possibly by another
-				//// concurrent iteration.
-				//continue
-				//}
 				r.alreadyQ[dep] = true
 				queue.PushBack(r.vpath(dep))
 			} else if err != nil {
@@ -369,7 +375,7 @@
 			}
 			switch pi.Loc {
 			case LocVendor:
-				msg.Info("In vendor: %s", imp)
+				msg.Debug("In vendor: %s", imp)
 				if _, ok := r.alreadyQ[imp]; !ok {
 					msg.Debug("Marking %s to be scanned.", imp)
 					r.alreadyQ[imp] = true
@@ -426,7 +432,6 @@
 
 			r.Config.Imports = append(r.Config.Imports, newDep)
 		}
-		//res = append(res, e.Value.(string))
 		res = append(res, t)
 	}
 
@@ -434,6 +439,10 @@
 }
 
 // resolveList takes a list and resolves it.
+//
+// This walks the entire file tree for the given dependencies, not just the
+// parts that are imported directly. Using this will discover dependencies
+// regardless of OS, and arch.
 func (r *Resolver) resolveList(queue *list.List) ([]string, error) {
 
 	var failedDep string
diff --git a/glide.go b/glide.go
index e7900a8..ade25c9 100644
--- a/glide.go
+++ b/glide.go
@@ -171,6 +171,10 @@
 					Usage: "If there was a change in the repo or VCS switch to new one. Warning, changes will be lost.",
 				},
 				cli.BoolFlag{
+					Name:  "all-dependencies",
+					Usage: "This will resolve all dependencies for all packages, not just those directly used.",
+				},
+				cli.BoolFlag{
 					Name:  "update-vendored, u",
 					Usage: "Update vendored packages (without local VCS repo). Warning, changes will be lost.",
 				},
@@ -194,11 +198,12 @@
 				}
 
 				inst := &repo.Installer{
-					Force:          c.Bool("force"),
-					UseCache:       c.Bool("cache"),
-					UseGopath:      c.Bool("use-gopath"),
-					UseCacheGopath: c.Bool("cache-gopath"),
-					UpdateVendored: c.Bool("update-vendored"),
+					Force:           c.Bool("force"),
+					UseCache:        c.Bool("cache"),
+					UseGopath:       c.Bool("use-gopath"),
+					UseCacheGopath:  c.Bool("cache-gopath"),
+					UpdateVendored:  c.Bool("update-vendored"),
+					ResolveAllFiles: c.Bool("all-dependencies"),
 				}
 				packages := []string(c.Args())
 				insecure := c.Bool("insecure")
@@ -425,6 +430,10 @@
 					Usage: "If there was a change in the repo or VCS switch to new one. Warning, changes will be lost.",
 				},
 				cli.BoolFlag{
+					Name:  "all-dependencies",
+					Usage: "This will resolve all dependencies for all packages, not just those directly used.",
+				},
+				cli.BoolFlag{
 					Name:  "update-vendored, u",
 					Usage: "Update vendored packages (without local VCS repo). Warning, changes will be lost.",
 				},
@@ -447,13 +456,14 @@
 			},
 			Action: func(c *cli.Context) {
 				installer := &repo.Installer{
-					DeleteUnused:   c.Bool("deleteOptIn"),
-					UpdateVendored: c.Bool("update-vendored"),
-					Force:          c.Bool("force"),
-					UseCache:       c.Bool("cache"),
-					UseCacheGopath: c.Bool("cache-gopath"),
-					UseGopath:      c.Bool("use-gopath"),
-					Home:           gpath.Home(),
+					DeleteUnused:    c.Bool("deleteOptIn"),
+					UpdateVendored:  c.Bool("update-vendored"),
+					ResolveAllFiles: c.Bool("all-dependencies"),
+					Force:           c.Bool("force"),
+					UseCache:        c.Bool("cache"),
+					UseCacheGopath:  c.Bool("cache-gopath"),
+					UseGopath:       c.Bool("use-gopath"),
+					Home:            gpath.Home(),
 				}
 
 				action.Update(installer, c.Bool("no-recursive"))
@@ -474,7 +484,7 @@
 		},
 		{
 			Name:  "list",
-			Usage: "List prints all dependencies that Glide could discover.",
+			Usage: "List prints all dependencies that the present code references.",
 			Description: `List scans your code and lists all of the packages that are used.
 
 			It does not use the glide.yaml. Instead, it inspects the code to determine what packages are
diff --git a/repo/installer.go b/repo/installer.go
index 29f67f3..3401108 100644
--- a/repo/installer.go
+++ b/repo/installer.go
@@ -47,6 +47,11 @@
 	// imported pacakgage references this pacakage it does not need to be
 	// downloaded and searched out again.
 	RootPackage string
+
+	// ResolveAllFiles enables a resolver that will examine the dependencies
+	// of every file of every package, rather than only following imported
+	// packages.
+	ResolveAllFiles bool
 }
 
 // VendorPath returns the path to the location to put vendor packages
@@ -173,13 +178,16 @@
 	res.Config = conf
 	res.Handler = m
 	res.VersionHandler = v
+	res.ResolveAllFiles = i.ResolveAllFiles
 	msg.Info("Resolving imports")
 	_, err = allPackages(conf.Imports, res)
 	if err != nil {
 		msg.Die("Failed to retrieve a list of dependencies: %s", err)
 	}
 
-	msg.Warn("devImports not resolved.")
+	if len(conf.DevImports) > 0 {
+		msg.Warn("dev imports not resolved.")
+	}
 
 	err = ConcurrentUpdate(conf.Imports, vpath, i)
 
@@ -207,6 +215,7 @@
 	}
 	res.Config = conf
 	res.VersionHandler = v
+	res.ResolveAllFiles = i.ResolveAllFiles
 
 	msg.Info("Resolving imports")
 	_, err = allPackages(conf.Imports, res)
@@ -214,7 +223,9 @@
 		msg.Die("Failed to retrieve a list of dependencies: %s", err)
 	}
 
-	msg.Warn("devImports not resolved.")
+	if len(conf.DevImports) > 0 {
+		msg.Warn("dev imports not resolved.")
+	}
 
 	return conf.Imports
 }
@@ -257,6 +268,7 @@
 		in <- dep
 	}
 
+	msg.Info("Downloading dependencies. Please wait...")
 	wg.Wait()
 
 	// Close goroutines setting the version
@@ -320,7 +332,7 @@
 		return true, nil
 	}
 
-	msg.Info("Fetching %s into %s", pkg, m.destination)
+	msg.Info("- Fetching %s into %s", pkg, m.destination)
 
 	d := m.Config.Imports.Get(root)
 	// If the dependency is nil it means the Config doesn't yet know about it.
diff --git a/repo/vcs.go b/repo/vcs.go
index d463b22..d2a5d5d 100644
--- a/repo/vcs.go
+++ b/repo/vcs.go
@@ -30,7 +30,7 @@
 		return nil
 	}
 
-	msg.Info("Fetching updates for %s.\n", dep.Name)
+	msg.Info("- Fetching updates for %s.\n", dep.Name)
 
 	if filterArchOs(dep) {
 		msg.Info("%s is not used for %s/%s.\n", dep.Name, runtime.GOOS, runtime.GOARCH)