From fff0a34cffd686c09144058cbba44146fabc42e5 Mon Sep 17 00:00:00 2001 From: Ollie Phillips Date: Fri, 24 Feb 2017 15:17:28 +0000 Subject: add as command line option and usage text --- cmd/ponzu/main.go | 11 +++++++++++ cmd/ponzu/usage.go | 15 +++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/cmd/ponzu/main.go b/cmd/ponzu/main.go index f44f626..494158d 100644 --- a/cmd/ponzu/main.go +++ b/cmd/ponzu/main.go @@ -88,6 +88,10 @@ func main() { case "version", "v": fmt.Println(usageVersion) os.Exit(0) + + case "add", "a": + fmt.Println(usageAdd) + os.Exit(0) } case "new": @@ -265,6 +269,13 @@ func main() { fmt.Println("Input not recognized. No upgrade made. Answer as 'y' or 'n' only.") } + case "add", "a": + // expecting two args, add and the go gettable package uri + if len(args) < 2 { + fmt.Println(usageAdd) + os.Exit(0) + } + case "": fmt.Println(usage) fmt.Println(usageHelp) diff --git a/cmd/ponzu/usage.go b/cmd/ponzu/usage.go index 3418cc1..a49f1d9 100644 --- a/cmd/ponzu/usage.go +++ b/cmd/ponzu/usage.go @@ -160,6 +160,21 @@ var usageVersion = ` > Ponzu v0.7.2 +` + +var usageAdd = ` +[--cli] add, d + + Downloads addon from specified URI to $GOPATH/src and copys it to the + current project's ./addons directory. Must be called from within a + Ponzu project directory. + + Example: + $ ponzu add github.com/bosssauce/fbscheduler + (or) + $ ponzu --cli add github.com/bosssauce/fbscheduler" + + ` func ponzu(isCLI bool) (map[string]interface{}, error) { -- cgit v1.2.3 From bf58736dbf18193765bf8b0da113d5c6e477c001 Mon Sep 17 00:00:00 2001 From: Ollie Phillips Date: Fri, 24 Feb 2017 15:34:11 +0000 Subject: Added usageAdd to useage const --- cmd/ponzu/main.go | 8 +++++++- cmd/ponzu/usage.go | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/cmd/ponzu/main.go b/cmd/ponzu/main.go index 494158d..e287fda 100644 --- a/cmd/ponzu/main.go +++ b/cmd/ponzu/main.go @@ -21,7 +21,7 @@ import ( var ( usage = usageHeader + usageNew + usageGenerate + - usageBuild + usageRun + usageUpgrade + usageVersion + usageBuild + usageRun + usageUpgrade + usageAdd + usageVersion port int httpsport int https bool @@ -276,6 +276,12 @@ func main() { os.Exit(0) } + /*err := getAddon(args) + if err != nil { + fmt.Println(err) + os.Exit(1) + }*/ + case "": fmt.Println(usage) fmt.Println(usageHelp) diff --git a/cmd/ponzu/usage.go b/cmd/ponzu/usage.go index a49f1d9..48e11df 100644 --- a/cmd/ponzu/usage.go +++ b/cmd/ponzu/usage.go @@ -163,7 +163,7 @@ var usageVersion = ` ` var usageAdd = ` -[--cli] add, d +[--cli] add, a Downloads addon from specified URI to $GOPATH/src and copys it to the current project's ./addons directory. Must be called from within a -- cgit v1.2.3 From 7fbc2ae2e3cb76d34ffd2f3cde9837c37510664b Mon Sep 17 00:00:00 2001 From: Ollie Phillips Date: Fri, 24 Feb 2017 15:42:47 +0000 Subject: add.go added --- cmd/ponzu/add.go | 5 +++++ cmd/ponzu/main.go | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 cmd/ponzu/add.go diff --git a/cmd/ponzu/add.go b/cmd/ponzu/add.go new file mode 100644 index 0000000..871f674 --- /dev/null +++ b/cmd/ponzu/add.go @@ -0,0 +1,5 @@ +package main + +func getAddon(args []string) error { + return nil +} diff --git a/cmd/ponzu/main.go b/cmd/ponzu/main.go index e287fda..b3dc708 100644 --- a/cmd/ponzu/main.go +++ b/cmd/ponzu/main.go @@ -276,11 +276,11 @@ func main() { os.Exit(0) } - /*err := getAddon(args) + err := getAddon(args) if err != nil { fmt.Println(err) os.Exit(1) - }*/ + } case "": fmt.Println(usage) -- cgit v1.2.3 From 586e877ff564484fdeac636baf5c49d6bc97c037 Mon Sep 17 00:00:00 2001 From: Ollie Phillips Date: Fri, 24 Feb 2017 17:05:28 +0000 Subject: getAddon(), comprising go get and copy routines --- cmd/ponzu/add.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/cmd/ponzu/add.go b/cmd/ponzu/add.go index 871f674..2522a43 100644 --- a/cmd/ponzu/add.go +++ b/cmd/ponzu/add.go @@ -1,5 +1,57 @@ package main +import ( + "errors" + "os" + "os/exec" + "path/filepath" + "strings" +) + +// Use `go get` to download addon and add to $GOPATH/src, useful +// for IDE auto-import and code completion, then copy entire directory +// tree to project's ./addons folder func getAddon(args []string) error { + + // error return + errorFunc := func(err error) error { + return errors.New("Ponzu add failed. " + "\n" + err.Error()) + } + + var cmdOptions []string + var addonPath = args[1] + + // Go get + cmdOptions = append(cmdOptions, addonPath) + get := exec.Command(gocmd, cmdOptions...) + get.Stderr = os.Stderr + get.Stdout = os.Stdout + + err := get.Start() + if err != nil { + errorFunc(err) + } + err = get.Wait() + if err != nil { + errorFunc(err) + } + + // Copy to ./addons folder + + // GOPATH can be a list delimited by ":" on Linux or ";" on Windows + // go get uses the first, this should parse out the first whatever the OS + envGOPATH := os.Getenv("GOPATH") + gopaths := strings.Split(envGOPATH, ":") + gopath := gopaths[0] + gopaths = strings.Split(envGOPATH, ";") + gopath = gopaths[0] + + src := filepath.Join(gopath, addonPath) + dest := filepath.Join("./addons", addonPath) + + err = copyAll(src, dest) + if err != nil { + errorFunc(err) + } return nil } -- cgit v1.2.3 From 0c16e95b243d909fe9a87e5e1fd259504ae091b6 Mon Sep 17 00:00:00 2001 From: Ollie Phillips Date: Fri, 24 Feb 2017 17:07:31 +0000 Subject: Comment improvement --- cmd/ponzu/add.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cmd/ponzu/add.go b/cmd/ponzu/add.go index 2522a43..d7431ac 100644 --- a/cmd/ponzu/add.go +++ b/cmd/ponzu/add.go @@ -37,9 +37,8 @@ func getAddon(args []string) error { } // Copy to ./addons folder - // GOPATH can be a list delimited by ":" on Linux or ";" on Windows - // go get uses the first, this should parse out the first whatever the OS + // `go get` uses the first, this should parse out the first whatever the OS envGOPATH := os.Getenv("GOPATH") gopaths := strings.Split(envGOPATH, ":") gopath := gopaths[0] -- cgit v1.2.3 From 58e3755af5f1c49ee00dc4d0ccb06fcac4c2706d Mon Sep 17 00:00:00 2001 From: Ollie Phillips Date: Fri, 24 Feb 2017 17:10:27 +0000 Subject: added add.go to cmdBuildFiles in buidPonzuServer() --- cmd/ponzu/options.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/ponzu/options.go b/cmd/ponzu/options.go index 9023f84..c406975 100644 --- a/cmd/ponzu/options.go +++ b/cmd/ponzu/options.go @@ -305,7 +305,7 @@ func buildPonzuServer(args []string) error { buildOptions := []string{"build", "-o", buildOutputName()} cmdBuildFiles := []string{ "main.go", "options.go", "generate.go", - "usage.go", "paths.go", + "usage.go", "paths.go", "add.go", } var cmdBuildFilePaths []string for _, file := range cmdBuildFiles { -- cgit v1.2.3 From 522eab3f9ba4297cf44685cf5e79902b90833845 Mon Sep 17 00:00:00 2001 From: Ollie Phillips Date: Fri, 24 Feb 2017 17:16:19 +0000 Subject: missed get in exec.command --- cmd/ponzu/add.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/ponzu/add.go b/cmd/ponzu/add.go index d7431ac..d0569c0 100644 --- a/cmd/ponzu/add.go +++ b/cmd/ponzu/add.go @@ -22,7 +22,7 @@ func getAddon(args []string) error { var addonPath = args[1] // Go get - cmdOptions = append(cmdOptions, addonPath) + cmdOptions = append(cmdOptions, "get", addonPath) get := exec.Command(gocmd, cmdOptions...) get.Stderr = os.Stderr get.Stdout = os.Stdout -- cgit v1.2.3 From cdc044e28529aa129de7ef685089a7dcc4f1d511 Mon Sep 17 00:00:00 2001 From: Ollie Phillips Date: Fri, 24 Feb 2017 17:28:02 +0000 Subject: break GOPATH determination out into separate function --- cmd/ponzu/add.go | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/cmd/ponzu/add.go b/cmd/ponzu/add.go index d0569c0..5d443b7 100644 --- a/cmd/ponzu/add.go +++ b/cmd/ponzu/add.go @@ -39,14 +39,10 @@ func getAddon(args []string) error { // Copy to ./addons folder // GOPATH can be a list delimited by ":" on Linux or ";" on Windows // `go get` uses the first, this should parse out the first whatever the OS - envGOPATH := os.Getenv("GOPATH") - gopaths := strings.Split(envGOPATH, ":") - gopath := gopaths[0] - gopaths = strings.Split(envGOPATH, ";") - gopath = gopaths[0] + gopath := resolveGOPATH() src := filepath.Join(gopath, addonPath) - dest := filepath.Join("./addons", addonPath) + dest := filepath.Join("addons", addonPath) err = copyAll(src, dest) if err != nil { @@ -54,3 +50,16 @@ func getAddon(args []string) error { } return nil } + +// GOPATH can be a list delimited by ":" on Linux or ";" on Windows +// `go get` uses saves packages to the first entry, so this function +// should parse out the first whatever the OS +func resolveGOPATH() string { + + envGOPATH := os.Getenv("GOPATH") + gopaths := strings.Split(envGOPATH, ":") + gopath := gopaths[0] + gopaths = strings.Split(envGOPATH, ";") + gopath = gopaths[0] + return gopath +} -- cgit v1.2.3 From bf695fb3c70e408b71a98f33b52d1811210fbcb9 Mon Sep 17 00:00:00 2001 From: Ollie Phillips Date: Fri, 24 Feb 2017 17:34:06 +0000 Subject: Some logging, files not copied --- cmd/ponzu/add.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cmd/ponzu/add.go b/cmd/ponzu/add.go index 5d443b7..f1b6cf5 100644 --- a/cmd/ponzu/add.go +++ b/cmd/ponzu/add.go @@ -2,6 +2,7 @@ package main import ( "errors" + "log" "os" "os/exec" "path/filepath" @@ -42,7 +43,9 @@ func getAddon(args []string) error { gopath := resolveGOPATH() src := filepath.Join(gopath, addonPath) + log.Println(src) dest := filepath.Join("addons", addonPath) + log.Println(dest) err = copyAll(src, dest) if err != nil { @@ -55,7 +58,6 @@ func getAddon(args []string) error { // `go get` uses saves packages to the first entry, so this function // should parse out the first whatever the OS func resolveGOPATH() string { - envGOPATH := os.Getenv("GOPATH") gopaths := strings.Split(envGOPATH, ":") gopath := gopaths[0] -- cgit v1.2.3 From 7a11bbc3c0b392e0aa1ab7adc3229e859294fffe Mon Sep 17 00:00:00 2001 From: Ollie Phillips Date: Fri, 24 Feb 2017 17:38:37 +0000 Subject: missed present directory from dest path, removed logging --- cmd/ponzu/add.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/cmd/ponzu/add.go b/cmd/ponzu/add.go index f1b6cf5..579f65b 100644 --- a/cmd/ponzu/add.go +++ b/cmd/ponzu/add.go @@ -2,7 +2,6 @@ package main import ( "errors" - "log" "os" "os/exec" "path/filepath" @@ -42,10 +41,13 @@ func getAddon(args []string) error { // `go get` uses the first, this should parse out the first whatever the OS gopath := resolveGOPATH() + pwd, err := os.Getwd() + if err != nil { + errorFunc(err) + } + src := filepath.Join(gopath, addonPath) - log.Println(src) - dest := filepath.Join("addons", addonPath) - log.Println(dest) + dest := filepath.Join(pwd, "addons", addonPath) err = copyAll(src, dest) if err != nil { -- cgit v1.2.3 From dd039300e8b54c78b4a7c9cb0c576c05bc5b62cd Mon Sep 17 00:00:00 2001 From: Ollie Phillips Date: Fri, 24 Feb 2017 17:52:45 +0000 Subject: was thinking copyAll handled mkdir --- cmd/ponzu/add.go | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/cmd/ponzu/add.go b/cmd/ponzu/add.go index 579f65b..7107454 100644 --- a/cmd/ponzu/add.go +++ b/cmd/ponzu/add.go @@ -2,6 +2,7 @@ package main import ( "errors" + "log" "os" "os/exec" "path/filepath" @@ -13,11 +14,6 @@ import ( // tree to project's ./addons folder func getAddon(args []string) error { - // error return - errorFunc := func(err error) error { - return errors.New("Ponzu add failed. " + "\n" + err.Error()) - } - var cmdOptions []string var addonPath = args[1] @@ -29,11 +25,11 @@ func getAddon(args []string) error { err := get.Start() if err != nil { - errorFunc(err) + addError(err) } err = get.Wait() if err != nil { - errorFunc(err) + addError(err) } // Copy to ./addons folder @@ -43,15 +39,17 @@ func getAddon(args []string) error { pwd, err := os.Getwd() if err != nil { - errorFunc(err) + addError(err) } src := filepath.Join(gopath, addonPath) dest := filepath.Join(pwd, "addons", addonPath) + log.Println(dest) + err = os.Mkdir(dest, os.ModeDir|os.ModePerm) err = copyAll(src, dest) if err != nil { - errorFunc(err) + addError(err) } return nil } @@ -67,3 +65,8 @@ func resolveGOPATH() string { gopath = gopaths[0] return gopath } + +// error return +func addError(err error) error { + return errors.New("Ponzu add failed. " + "\n" + err.Error()) +} -- cgit v1.2.3 From 28c360a44d93e55aec2625fa83e62f2b2816d534 Mon Sep 17 00:00:00 2001 From: Ollie Phillips Date: Fri, 24 Feb 2017 18:01:57 +0000 Subject: missing src in the src path, nothing wrong with the destination and prob don't need mkdir --- cmd/ponzu/add.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cmd/ponzu/add.go b/cmd/ponzu/add.go index 7107454..0573a99 100644 --- a/cmd/ponzu/add.go +++ b/cmd/ponzu/add.go @@ -42,15 +42,19 @@ func getAddon(args []string) error { addError(err) } - src := filepath.Join(gopath, addonPath) + src := filepath.Join(gopath, "src", addonPath) dest := filepath.Join(pwd, "addons", addonPath) log.Println(dest) err = os.Mkdir(dest, os.ModeDir|os.ModePerm) - err = copyAll(src, dest) if err != nil { addError(err) } + err = copyAll(src, dest) + if err != nil { + log.Println(err) + //addError(err) + } return nil } -- cgit v1.2.3 From 2884d7d75e6a802f03d5af9c572b6aaf24e17d20 Mon Sep 17 00:00:00 2001 From: Ollie Phillips Date: Fri, 24 Feb 2017 19:03:32 +0000 Subject: Implemented a replicateAll func, since we need files to remain in GOPATH/src --- cmd/ponzu/add.go | 133 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 117 insertions(+), 16 deletions(-) diff --git a/cmd/ponzu/add.go b/cmd/ponzu/add.go index 0573a99..dd8af6c 100644 --- a/cmd/ponzu/add.go +++ b/cmd/ponzu/add.go @@ -2,14 +2,15 @@ package main import ( "errors" - "log" + "fmt" + "io" "os" "os/exec" "path/filepath" "strings" ) -// Use `go get` to download addon and add to $GOPATH/src, useful +// use `go get` to download addon and add to $GOPATH/src, useful // for IDE auto-import and code completion, then copy entire directory // tree to project's ./addons folder func getAddon(args []string) error { @@ -25,35 +26,32 @@ func getAddon(args []string) error { err := get.Start() if err != nil { - addError(err) + return addError(err) } err = get.Wait() if err != nil { - addError(err) + return addError(err) } - // Copy to ./addons folder + // copy to ./addons folder // GOPATH can be a list delimited by ":" on Linux or ";" on Windows // `go get` uses the first, this should parse out the first whatever the OS gopath := resolveGOPATH() pwd, err := os.Getwd() if err != nil { - addError(err) + return addError(err) } src := filepath.Join(gopath, "src", addonPath) - dest := filepath.Join(pwd, "addons", addonPath) - log.Println(dest) - err = os.Mkdir(dest, os.ModeDir|os.ModePerm) - if err != nil { - addError(err) - } - err = copyAll(src, dest) + // Need to strip the addon name for copyAll? + last := filepath.Base(addonPath) + dest := filepath.Join(pwd, "addons", strings.Replace(addonPath, last, "", 1)) + + err = replicateAll(src, dest) if err != nil { - log.Println(err) - //addError(err) + return addError(err) } return nil } @@ -70,7 +68,110 @@ func resolveGOPATH() string { return gopath } -// error return +// this is distinct from copyAll() in that files are copied, not moved, +// since we also need them to remain in $GOPATH/src +// thanks to @markc of stack overflow for the copyFile and copyFileContents functions +func replicateAll(src, dst string) error { + err := filepath.Walk(src, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + + sep := string(filepath.Separator) + + // base == the ponzu project dir + string(filepath.Separator) + parts := strings.Split(src, sep) + base := strings.Join(parts[:len(parts)-1], sep) + base += sep + + target := filepath.Join(dst, path[len(base):]) + + // if its a directory, make dir in dst + if info.IsDir() { + err := os.MkdirAll(target, os.ModeDir|os.ModePerm) + if err != nil { + return err + } + } else { + // if its a file, copy file to dir of dst + err = copyFile(path, target) + if err != nil { + return err + } + } + + return nil + }) + if err != nil { + return err + } + + return nil +} + +// copyFile copies a file from src to dst. if src and dst files exist, and are +// the same, then return success. Otherise, attempt to create a hard link +// between the two files. If that fail, copy the file contents from src to dst. +// thanks to Stack Overflow +func copyFile(src, dst string) (err error) { + sfi, err := os.Stat(src) + if err != nil { + return + } + if !sfi.Mode().IsRegular() { + // cannot copy non-regular files (e.g., directories, + // symlinks, devices, etc.) + return fmt.Errorf("CopyFile: non-regular source file %s (%q)", sfi.Name(), sfi.Mode().String()) + } + dfi, err := os.Stat(dst) + if err != nil { + if !os.IsNotExist(err) { + return + } + } else { + if !(dfi.Mode().IsRegular()) { + return fmt.Errorf("CopyFile: non-regular destination file %s (%q)", dfi.Name(), dfi.Mode().String()) + } + if os.SameFile(sfi, dfi) { + return + } + } + if err = os.Link(src, dst); err == nil { + return + } + err = copyFileContents(src, dst) + return +} + +// copyFileContents copies the contents of the file named src to the file named +// by dst. The file will be created if it does not already exist. If the +// destination file exists, all it's contents will be replaced by the contents +// of the source file. +// Thanks for Stack Overflow +func copyFileContents(src, dst string) (err error) { + in, err := os.Open(src) + if err != nil { + return + } + defer in.Close() + out, err := os.Create(dst) + if err != nil { + return + } + defer func() { + cerr := out.Close() + if err == nil { + err = cerr + } + }() + if _, err = io.Copy(out, in); err != nil { + return + } + err = out.Sync() + return +} + +// generic error return func addError(err error) error { return errors.New("Ponzu add failed. " + "\n" + err.Error()) } -- cgit v1.2.3 From 121a63ae3b95b9cbc7066c7437a1b8968344d22d Mon Sep 17 00:00:00 2001 From: Ollie Phillips Date: Fri, 24 Feb 2017 19:10:29 +0000 Subject: Added ponzu add to the README --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index 963aede..657fab3 100644 --- a/README.md +++ b/README.md @@ -182,6 +182,19 @@ $ ponzu upgrade --- +### add, a + +Downloads an addon to GOPATH/src and copys it to the Ponzu project's ./addons directory. + +Example: +```bash +$ ponzu add github.com/bosssauce/fbscheduler +``` + +Errors will be reported, but successful add commands return nothing. + +--- + ### version, v Prints the version of Ponzu your project is using. Must be called from within a -- cgit v1.2.3 From 5fcca313e9b421a6ed19881bc7d8e28bb0e507bf Mon Sep 17 00:00:00 2001 From: Ollie Phillips Date: Fri, 24 Feb 2017 19:11:15 +0000 Subject: Removed some redundant info I missed --- cmd/ponzu/usage.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/cmd/ponzu/usage.go b/cmd/ponzu/usage.go index 48e11df..ca00e37 100644 --- a/cmd/ponzu/usage.go +++ b/cmd/ponzu/usage.go @@ -171,8 +171,6 @@ var usageAdd = ` Example: $ ponzu add github.com/bosssauce/fbscheduler - (or) - $ ponzu --cli add github.com/bosssauce/fbscheduler" ` -- cgit v1.2.3 From 88dc9b4d26022aeda295e03690c4eb4398e40487 Mon Sep 17 00:00:00 2001 From: Ollie Phillips Date: Fri, 24 Feb 2017 19:12:52 +0000 Subject: README tweak --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 657fab3..c8bf1ed 100644 --- a/README.md +++ b/README.md @@ -185,6 +185,7 @@ $ ponzu upgrade ### add, a Downloads an addon to GOPATH/src and copys it to the Ponzu project's ./addons directory. +Must be called from within a Ponzu project directory. Example: ```bash -- cgit v1.2.3 From b0975d15ad64630b0e5830a5f28e07a2d3b6908d Mon Sep 17 00:00:00 2001 From: Ollie Phillips Date: Wed, 1 Mar 2017 10:27:04 +0000 Subject: revised GOPATH detection for bug and Go 1.8 default --- cmd/ponzu/add.go | 43 ++++++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/cmd/ponzu/add.go b/cmd/ponzu/add.go index dd8af6c..abac59c 100644 --- a/cmd/ponzu/add.go +++ b/cmd/ponzu/add.go @@ -6,7 +6,9 @@ import ( "io" "os" "os/exec" + "os/user" "path/filepath" + "runtime" "strings" ) @@ -34,9 +36,11 @@ func getAddon(args []string) error { } // copy to ./addons folder - // GOPATH can be a list delimited by ":" on Linux or ";" on Windows - // `go get` uses the first, this should parse out the first whatever the OS - gopath := resolveGOPATH() + // resolve GOPATH + gopath, err := getGOPATH() + if err != nil { + return addError(err) + } pwd, err := os.Getwd() if err != nil { @@ -56,16 +60,29 @@ func getAddon(args []string) error { return nil } -// GOPATH can be a list delimited by ":" on Linux or ";" on Windows -// `go get` uses saves packages to the first entry, so this function -// should parse out the first whatever the OS -func resolveGOPATH() string { - envGOPATH := os.Getenv("GOPATH") - gopaths := strings.Split(envGOPATH, ":") - gopath := gopaths[0] - gopaths = strings.Split(envGOPATH, ";") - gopath = gopaths[0] - return gopath +// resolve GOPATH. In 1.8 can be default, or custom. A custom GOPATH can +// also contain multiple paths, in which case 'go get' uses the first +func getGOPATH() (string, error) { + var gopath string + gopath = os.Getenv("GOPATH") + if gopath == "" { + // not set, find the default + usr, err := user.Current() + if err != nil { + return gopath, err + } + gopath = filepath.Join(usr.HomeDir, "go") + } else { + // parse out in case of multiple, retain first + if runtime.GOOS == "windows" { + gopaths := strings.Split(gopath, ";") + gopath = gopaths[0] + } else { + gopaths := strings.Split(gopath, ":") + gopath = gopaths[0] + } + } + return gopath, nil } // this is distinct from copyAll() in that files are copied, not moved, -- cgit v1.2.3 From 7297805267e51b9567be4a955b3fe4db0e58f4b0 Mon Sep 17 00:00:00 2001 From: Steve Manuel Date: Wed, 1 Mar 2017 10:43:37 -0800 Subject: update usage --- cmd/ponzu/usage.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/ponzu/usage.go b/cmd/ponzu/usage.go index ca00e37..fd289cf 100644 --- a/cmd/ponzu/usage.go +++ b/cmd/ponzu/usage.go @@ -163,9 +163,9 @@ var usageVersion = ` ` var usageAdd = ` -[--cli] add, a +add, a - Downloads addon from specified URI to $GOPATH/src and copys it to the + Downloads addon from specified import path to $GOPATH/src and copys it to the current project's ./addons directory. Must be called from within a Ponzu project directory. -- cgit v1.2.3