mirror of
https://github.com/Yash-Handa/logo-ls.git
synced 2026-08-28 10:15:33 -05:00
71 lines
1.2 KiB
Go
71 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/go-git/go-git/v5"
|
|
)
|
|
|
|
func getRepoStatus(path string) (git.Status, string, error) {
|
|
op := git.PlainOpenOptions{DetectDotGit: true}
|
|
r, err := git.PlainOpenWithOptions(path, &op)
|
|
if err != nil {
|
|
return nil, "", err
|
|
}
|
|
|
|
w, err := r.Worktree()
|
|
if err != nil {
|
|
return nil, "", err
|
|
}
|
|
|
|
ws, err := w.Status()
|
|
if err != nil {
|
|
return nil, "", err
|
|
}
|
|
|
|
return ws, w.Filesystem.Root(), nil
|
|
}
|
|
|
|
func getFilesGitStatus(p string) map[string]string {
|
|
gitRepo, gitRoot, err := getRepoStatus(p)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
pAbs, err := filepath.Abs(p)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
|
|
t := make(map[string]string)
|
|
|
|
for i, v := range gitRepo {
|
|
i = gitFilePath(gitRoot+"/"+i, pAbs+"/")
|
|
if i == "" {
|
|
continue
|
|
}
|
|
dirs := strings.SplitAfter(i, "/")
|
|
d := ""
|
|
for j, seg := range dirs {
|
|
if j == len(dirs)-1 {
|
|
if v.Worktree == '?' {
|
|
t[i] = "U"
|
|
} else {
|
|
t[i] = string(v.Worktree)
|
|
}
|
|
} else {
|
|
d += seg
|
|
t[d] = "●"
|
|
}
|
|
}
|
|
}
|
|
return t
|
|
}
|
|
|
|
func gitFilePath(gitpath, dirpath string) string {
|
|
if strings.HasPrefix(gitpath, dirpath) {
|
|
return strings.TrimPrefix(gitpath, dirpath)
|
|
}
|
|
return ""
|
|
}
|