Beginning to support recursive glide.
diff --git a/cmd/recursive_glide.go b/cmd/recursive_glide.go new file mode 100644 index 0000000..1ddd457 --- /dev/null +++ b/cmd/recursive_glide.go
@@ -0,0 +1,46 @@ +package cmd + +import ( + "os" + "path" + + "github.com/Masterminds/cookoo" +) + +// Recurse does glide installs on dependent packages. +// Recurse looks in all known packages for a glide.yaml files and installs for +// each one it finds. +func Recurse(c cookoo.Context, p *cookoo.Params) (interface{}, cookoo.Interrupt) { + Info("Checking dependencies for updates.\n") + conf := p.Get("conf", &Config{}).(*Config) + vend, _ := VendorPath(c) + + if len(conf.Imports) == 0 { + Info("No imports.\n") + } + + // Look in each package to see whether it has a glide.yaml, and no vendor/ + for _, imp := range conf.Imports { + Info("Looking in %s for a glide.yaml file.\n", imp.Name) + if needsGlideUp(path.Join(vend, imp.Name)) { + Info("Package %s needs `glide up`\n", imp.Name) + // How do we want to do this? Should we run the glide command, + // which would allow environmental control, or should we just + // run the update route in that directory? + } + } + + // Run `glide up` + return nil, nil +} + +func needsGlideUp(dir string) bool { + stat, err := os.Stat(path.Join(dir, "glide.yaml")) + if err != nil || stat.IsDir() { + return false + } + + // Should probably see if vendor is there and non-empty. + + return true +}
diff --git a/glide.go b/glide.go index f3ada5f..535fa03 100644 --- a/glide.go +++ b/glide.go
@@ -313,7 +313,9 @@ Using("conf").From("cxt:cfg"). Using("optIn").From("cxt:deleteOptIn"). Does(cmd.UpdateImports, "dependencies").Using("conf").From("cxt:cfg"). - Does(cmd.SetReference, "version").Using("conf").From("cxt:cfg") + Does(cmd.SetReference, "version").Using("conf").From("cxt:cfg"). + Does(cmd.Recurse, "recurse").Using("conf").From("cxt:cfg") + //Does(cmd.Rebuild, "rebuild").Using("conf").From("cxt:cfg") reg.Route("rebuild", "Rebuild dependencies").