Trial run of `glide novendor`.
diff --git a/cmd/novendor.go b/cmd/novendor.go
new file mode 100644
index 0000000..783f1d0
--- /dev/null
+++ b/cmd/novendor.go
@@ -0,0 +1,75 @@
+package cmd
+
+import (
+ "fmt"
+ "os"
+ "path/filepath"
+ "strings"
+
+ "github.com/Masterminds/cookoo"
+)
+
+// NoVendor takes a path and returns all subpaths that are not vendor directories.
+//
+// It is not recursive.
+//
+// If the given path is a file, it returns that path unaltered.
+//
+// If the given path is a directory, it scans all of the immediate children,
+// and returns all of the go files and directories that are not vendor.
+func NoVendor(c cookoo.Context, p *cookoo.Params) (interface{}, cookoo.Interrupt) {
+ path := p.Get("path", ".").(string)
+
+ return noVend(path)
+}
+
+// Take a list of paths and print a single string with space-separated paths.
+func PathString(c cookoo.Context, p *cookoo.Params) (interface{}, cookoo.Interrupt) {
+ paths := p.Get("paths", []string{}).([]string)
+ s := strings.Join(paths, " ")
+ fmt.Println(s)
+ return nil, nil
+}
+
+// noVend takes a directory and returns a list of Go-like files or directories,
+// provided the directory is not a vendor directory.
+func noVend(path string) ([]string, error) {
+
+ info, err := os.Stat(path)
+ if err != nil {
+ return []string{}, err
+ }
+
+ if !info.IsDir() {
+ return []string{path}, nil
+ }
+
+ res := []string{}
+ f, err := os.Open(path)
+ if err != nil {
+ return res, err
+ }
+
+ fis, err := f.Readdir(0)
+ if err != nil {
+ return res, err
+ }
+
+ for _, fi := range fis {
+ full := filepath.Join(path, fi.Name())
+ if fi.IsDir() && !isVend(fi) {
+ res = append(res, full)
+ } else if !fi.IsDir() && isGoish(fi) {
+ res = append(res, full)
+ }
+ }
+ return res, nil
+}
+
+func isVend(fi os.FileInfo) bool {
+ return fi.Name() == "vendor"
+}
+
+func isGoish(fi os.FileInfo) bool {
+ return filepath.Ext(fi.Name()) == ".go"
+}
diff --git a/glide.go b/glide.go
index 0f1dee5..d421168 100644
--- a/glide.go
+++ b/glide.go
@@ -187,6 +187,20 @@
},
},
{
+ Name: "novendor",
+ ShortName: "nv",
+ Usage: "List all non-vendor directories and go files in a directory.",
+ Description: `Given a directory, list all the relevant Go files that are not vendored.
+
+Example:
+
+ $ go test $(glide novendor)
+`,
+ Action: func(c *cli.Context) {
+ setupHandler(c, "nv", cxt, router)
+ },
+ },
+ {
Name: "pin",
Usage: "Print a YAML file with all of the packages pinned to the current version",
Description: `Begins with the current glide.yaml and sets an absolute ref
@@ -404,6 +418,11 @@
Includes("@startup").
Does(cmd.Status, "status")
+ reg.Route("nv", "No Vendor").
+ Includes("@startup").
+ Does(cmd.NoVendor, "paths").
+ Does(cmd.PathString, "out").Using("paths").From("cxt:paths")
+
reg.Route("status", "Status").
Includes("@startup").
Does(cmd.Status, "status")