Added GetAll and changed `glide get` to allow multiple packages. Addresses #96
diff --git a/cmd/get_imports.go b/cmd/get_imports.go index 27b1eec..e977266 100644 --- a/cmd/get_imports.go +++ b/cmd/get_imports.go
@@ -28,6 +28,65 @@ //v.Logger = log.New(os.Stdout, "go-vcs", log.LstdFlags) } +// GetAll gets zero or more repos. +// +// Params: +// - packages ([]string): Package names to get. +// - verbose (bool): default false +// +// Returns: +// - []*Dependency: A list of constructed dependencies. +func GetAll(c cookoo.Context, p *cookoo.Params) (interface{}, cookoo.Interrupt) { + names := p.Get("packages", []string{}).([]string) + cfg := p.Get("conf", nil).(*Config) + + Info("Preparing to install %d package.", len(names)) + + deps := []*Dependency{} + for _, name := range names { + cwd, err := VendorPath(c) + if err != nil { + return nil, err + } + + root := getRepoRootFromPackage(name) + if len(root) == 0 { + return nil, fmt.Errorf("Package name is required for %q.", name) + } + + if cfg.HasDependency(root) { + Warn("Package %q is already in glide.yaml. Skipping", root) + continue + } + + dest := path.Join(cwd, root) + repoURL := "https://" + root + repo, err := v.NewRepo(repoURL, dest) + if err != nil { + Error("Could not construct repo for %q: %s", name, err) + return false, err + } + + dep := &Dependency{ + Name: root, + } + subpkg := strings.TrimPrefix(name, root) + if len(subpkg) > 0 && subpkg != "/" { + dep.Subpackages = []string{subpkg} + } + + if err := repo.Get(); err != nil { + return dep, err + } + + cfg.Imports = append(cfg.Imports, dep) + + deps = append(deps, dep) + + } + return deps, nil +} + // Get fetches a single package and puts it in vendor/. // // Params:
diff --git a/cmd/msg.go b/cmd/msg.go index 0835821..5f7e555 100644 --- a/cmd/msg.go +++ b/cmd/msg.go
@@ -65,6 +65,12 @@ return } fmt.Fprintf(os.Stderr, msg, args...) + + // Get rid of the annoying fact that messages need \n at the end, but do + // it in a backward compatible way. + if !strings.HasSuffix(msg, "\n") { + fmt.Fprintln(os.Stderr) + } } // Msg prints a message with optional arguments, that can be printed, of @@ -79,6 +85,6 @@ // Get rid of the annoying fact that messages need \n at the end, but do // it in a backward compatible way. if !strings.HasSuffix(msg, "\n") { - fmt.Println("") + fmt.Println() } }
diff --git a/glide.go b/glide.go index 4ef0fbd..ca3364e 100644 --- a/glide.go +++ b/glide.go
@@ -166,7 +166,7 @@ fmt.Println("Oops! Package name is required.") os.Exit(1) } - cxt.Put("package", c.Args()[0]) + cxt.Put("packages", []string(c.Args())) cxt.Put("recursiveDependencies", !c.Bool("no-recursive")) if c.Bool("import") { cxt.Put("importGodeps", true) @@ -409,9 +409,9 @@ reg.Route("get", "Install a pkg in vendor, and store the results in the glide.yaml"). Includes("@startup"). Includes("@ready"). - Does(cmd.Get, "goget"). + Does(cmd.GetAll, "goget"). Using("filename").From("cxt:yaml"). - Using("package").From("cxt:package"). + Using("packages").From("cxt:packages"). Using("conf").From("cxt:cfg"). Does(cmd.MergeToYaml, "merged").Using("conf").From("cxt:cfg"). Does(cmd.Recurse, "recurse").Using("conf").From("cxt:cfg").