diff options
Diffstat (limited to 'pkg/prompt/pwd.go')
| -rw-r--r-- | pkg/prompt/pwd.go | 157 |
1 files changed, 0 insertions, 157 deletions
diff --git a/pkg/prompt/pwd.go b/pkg/prompt/pwd.go deleted file mode 100644 index 1b93987..0000000 --- a/pkg/prompt/pwd.go +++ /dev/null @@ -1,157 +0,0 @@ -/******************************************************************************* -* -* Copyright 2017 Stefan Majewsky <majewsky@gmx.net> -* -* This program is free software: you can redistribute it and/or modify it under -* the terms of the GNU General Public License as published by the Free Software -* Foundation, either version 3 of the License, or (at your option) any later -* version. -* -* This program is distributed in the hope that it will be useful, but WITHOUT ANY -* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -* A PARTICULAR PURPOSE. See the GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License along with -* this program. If not, see <http://www.gnu.org/licenses/>. -* -*******************************************************************************/ - -package prompt - -import ( - "os" - "path/filepath" - "strings" -) - -//Directory contains all data about a directory that the prompt needs. -type Directory struct { - Path string - DisplayPath string - InBuildTree bool - InRepoTree bool - Repo *gitRepo - NearestAccessiblePath string -} - -//CurrentDirectory prepares a Directory struct for the current working -//directory. -func CurrentDirectory() Directory { - cwd, err := os.Getwd() - if err != nil { - cwd = filepath.Clean(os.Getenv("PWD")) - } - return NewDirectory(cwd) -} - -//NewDirectory prepares a Directory struct for the given path. -func NewDirectory(path string) (dir Directory) { - dir.Path = path - dir.DisplayPath = path - - //check if path actually exists - dir.NearestAccessiblePath = findNearestAccessiblePath(dir.Path) - if dir.NearestAccessiblePath == dir.Path { - //marks that everything is okay existence-wise - dir.NearestAccessiblePath = "" - - //display tag if below /x/build - if buildPath := os.Getenv("BUILD_ROOT"); buildPath != "" { - rel, _ := filepath.Rel(buildPath, dir.DisplayPath) - if !strings.HasPrefix(rel, "..") && rel != "." { - dir.InBuildTree = true - dir.DisplayPath = filepath.Join("/", rel) - } - } - - //display tag if below /x/src - if gopath := os.Getenv("GOPATH"); gopath != "" { - repoPath := filepath.Join(gopath, "src") - rel, _ := filepath.Rel(repoPath, dir.DisplayPath) - if !strings.HasPrefix(rel, "..") && rel != "." { - dir.InRepoTree = true - dir.DisplayPath = rel - } - } - - //strip $HOME prefix if applicable and desirable - dir.stripHomeDirFromDisplay() - - //check if we are inside a Git repository - var err error - dir.Repo, err = findRepo(dir.Path) - handleError(err) - } - - return -} - -//This part can benefit from a "return" in the middle, so it's in a separate function. -func (dir *Directory) stripHomeDirFromDisplay() { - if !strings.HasPrefix(dir.DisplayPath, "/") { - return - } - - homePath := os.Getenv("HOME") - if homePath == "" { - return - } - - rel, _ := filepath.Rel(homePath, dir.DisplayPath) - if rel == "." { - //do not display an empty DisplayPath if tags are displayed - if dir.InBuildTree || dir.InRepoTree { - return - } - rel = "" - } - if !strings.HasPrefix(rel, "..") { - dir.DisplayPath = rel - } -} - -func findNearestAccessiblePath(path string) string { - _, err := os.Stat(path) - if err == nil { - return path - } - return findNearestAccessiblePath(filepath.Dir(path)) -} - -func getDirectoryField(dir Directory) string { - if dir.DisplayPath == "" { - return "" - } - - txt := withColor("1;36", dir.DisplayPath) - if dir.NearestAccessiblePath == "" { - //cwd accessible -> highlight path elements inside the repo (if any) - if dir.Repo != nil && dir.Repo.RootPath != dir.Path { - rel, _ := filepath.Rel(dir.Repo.RootPath, dir.Path) - if strings.HasSuffix(dir.DisplayPath, rel) { - base := strings.TrimSuffix(dir.DisplayPath, rel) - txt = withColor("0;36", base) + withColor("1;36", rel) - } - } - } else { - //cwd inaccessible -> highlight inaccessible path elements - rel, _ := filepath.Rel(dir.NearestAccessiblePath, dir.Path) - txt = withColor("1;36", dir.NearestAccessiblePath+"/") + withColor("1;31", rel) - } - - //apply tags - if dir.InRepoTree { - txt = withType("repo", txt) - } - if dir.InBuildTree { - txt = withType("build", txt) - } - return txt -} - -func getDeletedMessageField(dir Directory) string { - if dir.NearestAccessiblePath == "" { - return "" - } - return withColor("1;41", "cannot stat cwd") -} |
