summaryrefslogtreecommitdiff
path: root/new.go
diff options
context:
space:
mode:
Diffstat (limited to 'new.go')
-rw-r--r--new.go75
1 files changed, 58 insertions, 17 deletions
diff --git a/new.go b/new.go
index 4e4403c..b4acda4 100644
--- a/new.go
+++ b/new.go
@@ -7,6 +7,7 @@ import (
"strings"
"go.wit.com/lib/gadgets"
+ "go.wit.com/lib/gui/shell"
"go.wit.com/log"
)
@@ -41,34 +42,38 @@ func New(path string) (*RepoStatus, error) {
return r, err
}
-func NewRepoStatusWindow(path string) (error, *RepoStatus) {
- var realpath string
- var isGoLang bool = false
+func SetWorkPath(path string) {
+ os.Setenv("REPO_WORK_PATH", path)
+}
- if windowMap[path] == nil {
- log.Log(INFO, "NewRepoStatusWindow() adding new", path)
- } else {
- log.Warn("This already exists for path", path)
- log.Warn("should return windowMap[path] here")
- return nil, windowMap[path]
- }
+// guess the paths. returns
+// realpath : the actual path on the filesystem
+// goSrcPath : this could be ~/go/src, or where the go.work file is
+// goPath : go.wit.com/lib/gui/repostatus (for example)
+// true/false if the repo is a golang repo
+func guessPaths(path string) (string, string, string, bool, error) {
+ var realpath, goSrcDir string
+ var isGoLang bool = false
homeDir, err := os.UserHomeDir()
if err != nil {
log.Log(WARN, "Error getting home directory:", err)
- return err, nil
+ return path, realpath, goSrcDir, false, err
}
- goSrcDir := filepath.Join(homeDir, "go/src")
+ goSrcDir = filepath.Join(homeDir, "go/src")
- rs := &RepoStatus{
- ready: false,
+ // allow arbitrary paths, otherwise, assume the repo is in ~/go/src
+ // unless REPO_WORK_PATH was set. to over-ride ~/go/src
+ // todo, look for go.work
+ if os.Getenv("REPO_WORK_PATH") == "" {
+ os.Setenv("REPO_WORK_PATH", goSrcDir)
+ } else {
+ goSrcDir = os.Getenv("REPO_WORK_PATH")
}
- // allow arbitrary paths, otherwise, assume the repo is in ~/go/src
if strings.HasPrefix(path, "/") {
realpath = path
} else if strings.HasPrefix(path, "~") {
- // TODO: example this to homedir
tmp := strings.TrimPrefix(path, "~")
realpath = filepath.Join(homeDir, tmp)
} else {
@@ -78,18 +83,54 @@ func NewRepoStatusWindow(path string) (error, *RepoStatus) {
if !IsDirectory(realpath) {
log.Log(REPOWARN, "directory doesn't exist", realpath)
// directory doesn't exist. exit with nil and error nil
- return errors.New(realpath + " does not exist"), nil
+ return path, realpath, goSrcDir, false, errors.New(realpath + " does not exist")
}
+ clone(goSrcDir, path)
filename := filepath.Join(realpath, ".git/config")
_, err = os.Open(filename)
if err != nil {
// log.Log(WARN, "Error reading .git/config:", filename, err)
// log.Log(WARN, "TODO: find .git/config in parent directory")
+ return path, realpath, goSrcDir, false, err
+ }
+ return path, realpath, goSrcDir, isGoLang, nil
+}
+
+// attempt to git clone if the go path doesn't exist
+func clone(wdir string, path string) {
+ fullpath := filepath.Join(wdir, path)
+ if IsDirectory(fullpath) {
+ return
+ }
+ err := os.Chdir(wdir)
+ if err != nil {
+ return
+ }
+
+ base := filepath.Join(wdir, filepath.Dir(path))
+ shell.RunPath(base, []string{"git", "clone", "http://" + path})
+}
+
+func NewRepoStatusWindow(path string) (error, *RepoStatus) {
+ path, realpath, goSrcDir, isGoLang, err := guessPaths(path)
+ if err != nil {
return err, nil
}
+ if windowMap[path] == nil {
+ log.Log(INFO, "NewRepoStatusWindow() adding new", path)
+ } else {
+ log.Warn("This already exists for path", path)
+ log.Warn("should return windowMap[path] here")
+ return nil, windowMap[path]
+ }
+
+ rs := &RepoStatus{
+ ready: false,
+ }
+
rs.tags = make(map[string]string)
rs.window = gadgets.RawBasicWindow("GO Repo Details " + path)
rs.window.Horizontal()