diff options
Diffstat (limited to 'new.go')
| -rw-r--r-- | new.go | 75 |
1 files changed, 58 insertions, 17 deletions
@@ -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() |
