summaryrefslogtreecommitdiff
path: root/examples/docker/admin/cmd/ponzu/add.go
diff options
context:
space:
mode:
Diffstat (limited to 'examples/docker/admin/cmd/ponzu/add.go')
-rw-r--r--examples/docker/admin/cmd/ponzu/add.go167
1 files changed, 0 insertions, 167 deletions
diff --git a/examples/docker/admin/cmd/ponzu/add.go b/examples/docker/admin/cmd/ponzu/add.go
deleted file mode 100644
index 05d6f16..0000000
--- a/examples/docker/admin/cmd/ponzu/add.go
+++ /dev/null
@@ -1,167 +0,0 @@
-package main
-
-import (
- "errors"
- "fmt"
- "io"
- "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 {
-
- var cmdOptions []string
- var addonPath = args[1]
-
- // Go get
- cmdOptions = append(cmdOptions, "get", addonPath)
- get := exec.Command(gocmd, cmdOptions...)
- get.Stderr = os.Stderr
- get.Stdout = os.Stdout
-
- err := get.Start()
- if err != nil {
- return addError(err)
- }
- err = get.Wait()
- if err != nil {
- return addError(err)
- }
-
- // copy to ./addons folder
- // resolve GOPATH
- gopath, err := getGOPATH()
- if err != nil {
- return addError(err)
- }
-
- pwd, err := os.Getwd()
- if err != nil {
- return addError(err)
- }
-
- src := filepath.Join(gopath, "src", addonPath)
-
- // 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 {
- return addError(err)
- }
- return nil
-}
-
-// 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())
-}