summaryrefslogtreecommitdiff
path: root/go-clone-test/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'go-clone-test/main.go')
-rw-r--r--go-clone-test/main.go168
1 files changed, 168 insertions, 0 deletions
diff --git a/go-clone-test/main.go b/go-clone-test/main.go
new file mode 100644
index 0000000..46c296b
--- /dev/null
+++ b/go-clone-test/main.go
@@ -0,0 +1,168 @@
+package main
+
+import (
+ "os"
+ "path/filepath"
+ "strings"
+ "time"
+
+ "go.wit.com/lib/gui/shell"
+ "go.wit.com/lib/protobuf/forgepb"
+ "go.wit.com/log"
+)
+
+// sent via -ldflags
+var VERSION string
+var BUILDTIME string
+
+func main() {
+ log.Info("go-clone version", VERSION, "built on", BUILDTIME)
+ me = new(testMe)
+ me.startPwd, _ = os.Getwd()
+
+ me.forge = forgepb.Init()
+ if me.forge.IsGoWork() {
+ log.Info()
+ log.Info("you can not run this here", me.forge.GetGoSrc())
+ log.Info("you have a go.work file")
+ log.Info("you must run this from a neutral location (not ~/go/src && not with a parent go.work file)")
+ log.Info()
+ os.Exit(-1)
+ } else {
+ if strings.HasPrefix(me.startPwd, me.forge.GetGoSrc()) {
+ log.Info()
+ log.Info("you can not run this here", me.forge.GetGoSrc())
+ log.Info("you are already in ~/go/src")
+ log.Info("you must run this from a neutral location (not ~/go/src && not with a parent go.work file)")
+ log.Info()
+ os.Exit(-1)
+ }
+ }
+
+ me.testDir1 = "goclonetest"
+ fullRun(me.testDir1)
+
+ me.testDir2 = "goclonetesttest"
+ fullRun(me.testDir2)
+
+ // try this a second time
+ // os.Mkdir(me.testDir2, 0755)
+}
+
+func fullRun(testDir string) {
+ os.Chdir(me.startPwd)
+ if argv.Force {
+ log.Info("removing", testDir)
+ shell.Run([]string{"rm", "-rf", testDir})
+ }
+ if shell.IsDir(filepath.Join(me.startPwd, testDir)) {
+ log.Info("you must remove", testDir)
+ os.Exit(-1)
+ }
+
+ testDir = "goclonetest"
+ os.Mkdir(testDir, 0755)
+ os.Chdir(testDir)
+ os.Unsetenv("FORGE_CONFIG")
+ os.Unsetenv("FORGE_GOSRC")
+ me.forge = forgepb.Init()
+
+ wd := filepath.Join(me.startPwd, testDir)
+ runStrict(wd, []string{"touch", "go.work"})
+
+ os.Chdir(me.startPwd)
+
+ prepBinary(testDir, "go.wit.com/apps/go-clone")
+ prepBinary(testDir, "go.wit.com/apps/autogenpb")
+ prepBinary(testDir, "go.wit.com/apps/forge")
+ prepBinary(testDir, "go.wit.com/apps/utils/wit-utils")
+
+ buildBinary(testDir, "go.wit.com/apps/go-clone")
+ buildBinary(testDir, "go.wit.com/apps/autogenpb")
+ buildBinary(testDir, "go.wit.com/apps/forge")
+ // buildBinary(testDir, "go.wit.com/apps/utils/wit-utils")
+
+ installBinary(testDir, "go.wit.com/apps/go-clone")
+ installBinary(testDir, "go.wit.com/apps/autogenpb")
+ installBinary(testDir, "go.wit.com/apps/forge")
+ // installBinary(testDir, "go.wit.com/apps/utils/wit-utils")
+}
+
+func prepBinary(testDir string, gopath string) {
+ wd := filepath.Join(me.startPwd, testDir)
+
+ time.Sleep(time.Second)
+ // this is probably why, although ENV is great, it might
+ // be a terrible idea? notsure... how often does this happen?
+ // this is a test app. does this really ever happen in the real world?
+ // switching GOSRC paths in the middle of doing things? It probably
+ // shouldn't be supported or work the way it does. which, in this
+ // case, breaks this test app
+ os.Unsetenv("FORGE_CONFIG")
+ os.Unsetenv("FORGE_GOSRC")
+ runStrict(wd, []string{"sync"})
+ runStrict(wd, []string{"/home/jcarr/go/bin/go-clone", "--recursive", gopath})
+ runStrict(wd, []string{"/home/jcarr/go/bin/go-clone", "--work"})
+}
+
+func buildBinary(testDir string, gopath string) {
+ os.Unsetenv("FORGE_CONFIG")
+ os.Unsetenv("FORGE_GOSRC")
+ me.forge = forgepb.Init()
+ if err := me.forge.ConfigSave; err != nil {
+ log.Info("crapnuts. forge.ConfigSave() failed", err)
+ }
+
+ /*
+ repos := me.forge.Repos.SortByGoPath()
+ for repos.Scan() {
+ repo := repos.Next()
+ log.Info("go.work repo (hopefully):", repo.GoPath, repo.FullPath)
+ }
+ */
+}
+
+func installBinary(testDir string, gopath string) {
+ wd := filepath.Join(me.startPwd, testDir, gopath)
+ repos := me.forge.Repos.SortByGoPath()
+ for repos.Scan() {
+ repo := repos.Next()
+ log.Info("go.work repo (hopefully):", repo.GoPath, repo.FullPath, repo.RepoType())
+ }
+ runStrict(wd, []string{"go-clone", "--install", gopath})
+ os.Exit(-1)
+}
+
+func runStrict(wd string, cmd []string) {
+ var err error
+ if err = os.Chdir(wd); err != nil {
+ log.Info("cd", "wd", "failed", err)
+ os.Exit(-1)
+ }
+ log.Info(wd, "running:", wd, cmd)
+ // result := shell.Run(cmd)
+ result := shell.RunRealtime(cmd)
+ if result.Exit != 0 {
+ log.Info("cmd failed", wd, cmd, err)
+ for i, line := range result.Stdout {
+ log.Info("STDOUT:", i, line)
+ }
+ for i, line := range result.Stderr {
+ log.Info("STDERR:", i, line)
+ }
+ os.Exit(-1)
+ }
+ if result.Error != nil {
+ log.Info("cmd failed", wd, cmd, err)
+ for i, line := range result.Stdout {
+ log.Info("STDOUT:", i, line)
+ }
+ for i, line := range result.Stderr {
+ log.Info("STDERR:", i, line)
+ }
+ os.Exit(-1)
+ }
+ for i, line := range result.Stdout {
+ log.Info(i, line)
+ }
+}