In several places, add support for specifying package. This addresses: - Issue #92: glide update [repo [repo [repo [...]]]] - Issue #96: streamlines a bit from previous commits - Issue #101: do not do redundant work on `glide get foo` - Extended that to do the same for `glide update` - Set the foundation for #85 by adding package list to UpdateReferences. However, there's more work to do on #85, including some that will break backward compat.
diff --git a/cmd/get_imports.go b/cmd/get_imports.go index e977266..da4ad69 100644 --- a/cmd/get_imports.go +++ b/cmd/get_imports.go
@@ -95,6 +95,8 @@ // // Returns: // - *Dependency: A dependency describing this package. +// +// DEPRECATED: This will be removed in the future. Use `GetAll` instead. func Get(c cookoo.Context, p *cookoo.Params) (interface{}, cookoo.Interrupt) { name := p.Get("package", "").(string) cfg := p.Get("conf", nil).(*Config) @@ -161,9 +163,19 @@ } // UpdateImports iterates over the imported packages and updates them. +// +// Params: +// +// - force (bool): force packages to update (default false) +// - conf (*Config): The configuration +// - packages([]string): The packages to update. Default is all. func UpdateImports(c cookoo.Context, p *cookoo.Params) (interface{}, cookoo.Interrupt) { cfg := p.Get("conf", nil).(*Config) force := p.Get("force", true).(bool) + plist := p.Get("packages", []string{}).([]string) + pkgs := list2map(plist) + restrict := len(pkgs) > 0 + cwd, err := VendorPath(c) if err != nil { return false, err @@ -175,6 +187,10 @@ } for _, dep := range cfg.Imports { + if restrict && !pkgs[dep.Name] { + Debug("===> Skipping %q", dep.Name) + continue + } if err := VcsUpdate(dep, cwd, force); err != nil { Warn("Update failed for %s: %s\n", dep.Name, err) }
diff --git a/cmd/recursive_glide.go b/cmd/recursive_glide.go index 83ea5d6..717249e 100644 --- a/cmd/recursive_glide.go +++ b/cmd/recursive_glide.go
@@ -10,13 +10,28 @@ ) // 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. +// +// The packages scanned can be restricted (at the top level) by providing +// a list of packages to scan in the `packages` param. +// +// Params: +// - enable (bool) +// - importGodeps (bool) +// - importGPM (bool) +// - importGb (bool) +// - deleteFlatten (bool) +// - force (bool) +// - packages ([]string): Packages to recurse through. If empty, does all of them. func Recurse(c cookoo.Context, p *cookoo.Params) (interface{}, cookoo.Interrupt) { if !p.Get("enable", true).(bool) { return nil, nil } force := p.Get("force", true).(bool) + plist := p.Get("packages", []string{}).([]string) + pkgs := list2map(plist) godeps, gpm, gb, deleteFlatten := false, false, false, false if g, ok := p.Has("importGodeps"); ok { @@ -40,10 +55,10 @@ conf := p.Get("conf", &Config{}).(*Config) vend, _ := VendorPath(c) - return recDepResolve(conf, vend, godeps, gpm, gb, force, deleteFlatten) + return recDepResolve(conf, pkgs, vend, godeps, gpm, gb, force, deleteFlatten) } -func recDepResolve(conf *Config, vend string, godeps, gpm, gb, force, deleteFlatten bool) (interface{}, error) { +func recDepResolve(conf *Config, filter map[string]bool, vend string, godeps, gpm, gb, force, deleteFlatten bool) (interface{}, error) { Info("Inspecting %s.\n", vend) @@ -51,8 +66,14 @@ Info("No imports.\n") } + restrict := len(filter) > 0 + // Look in each package to see whether it has a glide.yaml, and no vendor/ for _, imp := range conf.Imports { + if restrict && !filter[imp.Name] { + Debug("===> Skipping %q", imp.Name) + continue + } if imp.Flattened == true { continue } @@ -161,7 +182,9 @@ //recDepResolve(conf, path.Join(wd, "vendor")) } - recDepResolve(conf, path.Join(base, "vendor"), godep, gpm, gb, force, deleteFlatten) + // We only filter at the top level. + e := map[string]bool{} + recDepResolve(conf, e, path.Join(base, "vendor"), godep, gpm, gb, force, deleteFlatten) return nil }
diff --git a/cmd/update_references.go b/cmd/update_references.go index 2ad8f27..5536e64 100644 --- a/cmd/update_references.go +++ b/cmd/update_references.go
@@ -5,8 +5,20 @@ ) // UpdateReferences updates the revision numbers on all of the imports. +// +// If a `packages` list is supplied, only the given base packages will +// be updated. +// +// Params: +// - conf (*Config): Configuration +// - packages ([]string): A list of packages to update. Default is all packages. func UpdateReferences(c cookoo.Context, p *cookoo.Params) (interface{}, cookoo.Interrupt) { cfg := p.Get("conf", &Config{}).(*Config) + plist := p.Get("packages", []string{}).([]string) + + pkgs := list2map(plist) + restrict := len(pkgs) > 0 + cwd, err := VendorPath(c) if err != nil { return false, err @@ -17,6 +29,10 @@ } for _, imp := range cfg.Imports { + if restrict && !pkgs[imp.Name] { + Debug("===> Skipping %q", imp.Name) + continue + } commit, err := VcsLastCommit(imp, cwd) if err != nil { Warn("Could not get commit on %s: %s", imp.Name, err) @@ -26,3 +42,13 @@ return cfg, nil } + +// list2map takes a list of packages names and creates a map of normalized names. +func list2map(in []string) map[string]bool { + out := make(map[string]bool, len(in)) + for _, v := range in { + v, _ := NormalizeName(v) + out[v] = true + } + return out +}
diff --git a/glide.go b/glide.go index 00eb8a5..a71c5b5 100644 --- a/glide.go +++ b/glide.go
@@ -323,6 +323,8 @@ cxt.Put("importGb", true) } cxt.Put("updateVendoredDeps", c.Bool("update-vendored")) + + cxt.Put("packages", []string(c.Args())) setupHandler(c, "update", cxt, router) }, }, @@ -420,6 +422,7 @@ Using("importGPM").From("cxt:importGPM"). Using("importGb").From("cxt:importGb"). Using("force").From("cxt:forceUpdate").WithDefault(false). + Using("packages").From("cxt:packages"). Does(cmd.WriteYaml, "out"). Using("yaml.Node").From("cxt:merged"). Using("filename").WithDefault("glide.yaml").From("cxt:yaml") @@ -445,6 +448,7 @@ Does(cmd.UpdateImports, "dependencies"). Using("conf").From("cxt:cfg"). Using("force").From("cxt:forceUpdate"). + Using("packages").From("cxt:packages"). Does(cmd.SetReference, "version").Using("conf").From("cxt:cfg"). Does(cmd.Recurse, "recurse").Using("conf").From("cxt:cfg"). Using("deleteFlatten").From("cxt:deleteFlatten"). @@ -453,6 +457,7 @@ Using("importGb").From("cxt:importGb"). Using("enable").From("cxt:recursiveDependencies"). Using("force").From("cxt:forceUpdate"). + Using("packages").From("cxt:packages"). Does(cmd.VendoredCleanUp, "_"). Using("conf").From("cxt:cfg"). Using("update").From("cxt:updateVendoredDeps")