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")) }, }, {