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").