Adding ability for glide get to add test deps
diff --git a/action/get.go b/action/get.go
index d3ef2ef..e74ec52 100644
--- a/action/get.go
+++ b/action/get.go
@@ -18,7 +18,7 @@
 // Get fetches one or more dependencies and installs.
 //
 // This includes resolving dependency resolution and re-generating the lock file.
-func Get(names []string, installer *repo.Installer, insecure, skipRecursive, strip, stripVendor, nonInteract bool) {
+func Get(names []string, installer *repo.Installer, insecure, skipRecursive, strip, stripVendor, nonInteract, testDeps bool) {
 	if installer.UseCache {
 		cache.SystemLock()
 	}
@@ -33,7 +33,7 @@
 	}
 
 	// Add the packages to the config.
-	if count, err2 := addPkgsToConfig(conf, names, insecure, nonInteract); err2 != nil {
+	if count, err2 := addPkgsToConfig(conf, names, insecure, nonInteract, testDeps); err2 != nil {
 		msg.Die("Failed to get new packages: %s", err2)
 	} else if count == 0 {
 		msg.Warn("Nothing to do")
@@ -127,7 +127,7 @@
 // - separates repo from packages
 // - sets up insecure repo URLs where necessary
 // - generates a list of subpackages
-func addPkgsToConfig(conf *cfg.Config, names []string, insecure, nonInteract bool) (int, error) {
+func addPkgsToConfig(conf *cfg.Config, names []string, insecure, nonInteract, testDeps bool) (int, error) {
 
 	if len(names) == 1 {
 		msg.Info("Preparing to install %d package.", len(names))
@@ -152,17 +152,38 @@
 
 		if conf.HasDependency(root) {
 
+			var moved bool
+			var dep *cfg.Dependency
+			// Move from DevImports to Imports
+			if !testDeps && !conf.Imports.Has(root) && conf.DevImports.Has(root) {
+				dep = conf.DevImports.Get(root)
+				conf.Imports = append(conf.Imports, dep)
+				conf.DevImports = conf.DevImports.Remove(root)
+				moved = true
+				numAdded++
+				msg.Info("--> Moving %s from testImport to import", root)
+			} else if testDeps && conf.Imports.Has(root) {
+				msg.Warn("--> Test dependency %s already listed as import", root)
+			}
+
 			// Check if the subpackage is present.
 			if subpkg != "" {
-				dep := conf.Imports.Get(root)
+				if dep == nil {
+					dep = conf.Imports.Get(root)
+					if dep == nil && testDeps {
+						dep = conf.DevImports.Get(root)
+					}
+				}
 				if dep.HasSubpackage(subpkg) {
-					msg.Warn("--> Package %q is already in glide.yaml. Skipping", name)
+					if !moved {
+						msg.Warn("--> Package %q is already in glide.yaml. Skipping", name)
+					}
 				} else {
 					dep.Subpackages = append(dep.Subpackages, subpkg)
 					msg.Info("--> Adding sub-package %s to existing import %s", subpkg, root)
 					numAdded++
 				}
-			} else {
+			} else if !moved {
 				msg.Warn("--> Package %q is already in glide.yaml. Skipping", root)
 			}
 			continue
@@ -199,7 +220,11 @@
 			msg.Info("--> Adding %s to your configuration %s", dep.Name)
 		}
 
-		conf.Imports = append(conf.Imports, dep)
+		if testDeps {
+			conf.DevImports = append(conf.DevImports, dep)
+		} else {
+			conf.Imports = append(conf.Imports, dep)
+		}
 		numAdded++
 	}
 	return numAdded, nil
diff --git a/cfg/config.go b/cfg/config.go
index 58e3f07..4b24fca 100644
--- a/cfg/config.go
+++ b/cfg/config.go
@@ -308,6 +308,23 @@
 	return false
 }
 
+// Remove removes a dependency from a list of dependencies
+func (d Dependencies) Remove(name string) Dependencies {
+	found := -1
+	for i, dep := range d {
+		if dep.Name == name {
+			found = i
+		}
+	}
+
+	if found >= 0 {
+		copy(d[found:], d[found+1:])
+		d[len(d)-1] = nil
+		return d[:len(d)-1]
+	}
+	return d
+}
+
 // Clone performs a deep clone of Dependencies
 func (d Dependencies) Clone() Dependencies {
 	n := make(Dependencies, 0, len(d))
diff --git a/glide.go b/glide.go
index b2001d2..1190885 100644
--- a/glide.go
+++ b/glide.go
@@ -203,6 +203,10 @@
    folder.`,
 			Flags: []cli.Flag{
 				cli.BoolFlag{
+					Name:  "test",
+					Usage: "Add test dependencies.",
+				},
+				cli.BoolFlag{
 					Name:  "insecure",
 					Usage: "Use http:// rather than https:// to retrieve pacakges.",
 				},
@@ -280,7 +284,7 @@
 				inst.ResolveTest = !c.Bool("skip-test")
 				packages := []string(c.Args())
 				insecure := c.Bool("insecure")
-				action.Get(packages, inst, insecure, c.Bool("no-recursive"), c.Bool("strip-vcs"), c.Bool("strip-vendor"), c.Bool("non-interactive"))
+				action.Get(packages, inst, insecure, c.Bool("no-recursive"), c.Bool("strip-vcs"), c.Bool("strip-vendor"), c.Bool("non-interactive"), c.Bool("test"))
 			},
 		},
 		{