From ac2958e5598a33230caa81a307cde211f1be07cc Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Sat, 18 Jan 2025 15:48:52 -0600 Subject: [PATCH] code now moved to gitpb --- git.go | 17 ++--- gitConfig.go | 194 --------------------------------------------------- modifyBox.go | 10 +-- new.go | 4 +- structs.go | 6 +- update.go | 2 +- 6 files changed, 17 insertions(+), 216 deletions(-) delete mode 100644 gitConfig.go diff --git a/git.go b/git.go index 46a0ceb..060ad1e 100644 --- a/git.go +++ b/git.go @@ -1,14 +1,5 @@ package repostatus -import ( - "errors" - "strings" - - "go.wit.com/lib/gui/shell" - "go.wit.com/lib/protobuf/gitpb" - "go.wit.com/log" -) - // remove this everything func (rs *RepoStatus) Path() string { return rs.realPath.String() @@ -48,7 +39,8 @@ func (rs *RepoStatus) checkCurrentBranchName() string { return out } -func (rs *RepoStatus) gitDescribeByHash(hash string) (string, error) { +/* +func (rs *RepoStatus) oldgitDescribeByHash(hash string) (string, error) { if hash == "" { return "", errors.New("hash was blank") } @@ -61,7 +53,7 @@ func (rs *RepoStatus) gitDescribeByHash(hash string) (string, error) { return out, r.Error } -func (rs *RepoStatus) gitDescribeByName(name string) (string, error) { +func (rs *RepoStatus) oldgitDescribeByName(name string) (string, error) { name = strings.TrimSpace(name) if name == "" { @@ -88,7 +80,9 @@ func (rs *RepoStatus) gitDescribeByName(name string) (string, error) { return strings.TrimSpace(output), r.Error } +*/ +/* func (rs *RepoStatus) populateTags() { tmp := rs.realPath.String() + "/.git/refs/tags" log.Log(REPO, "populateTags() path =", tmp) @@ -101,3 +95,4 @@ func (rs *RepoStatus) populateTags() { } // rs.tagsDrop.SetText(rs.lasttagrev) } +*/ diff --git a/gitConfig.go b/gitConfig.go deleted file mode 100644 index d863cd7..0000000 --- a/gitConfig.go +++ /dev/null @@ -1,194 +0,0 @@ -package repostatus - -import ( - "bufio" - "io/ioutil" - "os" - "path/filepath" - "strings" - - "go.wit.com/log" -) - -// GitConfig represents the parsed .git/config data -// type GitConfig map[string]map[string]string -// TODO: switch to protobuf - -type remote struct { - url string - fetch string -} - -type branch struct { - remote string - merge string -} - -type GitConfig struct { - core map[string]string // map[origin] = "https:/git.wit.org/gui/gadgets" - remotes map[string]*remote // map[origin] = "https:/git.wit.org/gui/gadgets" - branches map[string]*branch // map[guimaster] = origin guimaster - submodules map[string]string - hashes map[string]string - versions map[string]string -} - -// readGitConfig reads and parses the .git/config file -func (rs *RepoStatus) readGitConfig() error { - filename := filepath.Join(rs.realPath.String(), "/.git/config") - file, err := os.Open(filename) - if err != nil { - log.Log(WARN, "readGitConfig() failed for file:", filename) - filename = filepath.Join(rs.realPath.String(), "../.git/config") - log.Log(WARN, "readGitConfig() trying up one directory instead", filename) - file, err = os.Open(filename) - if err != nil { - return err - } - } - defer file.Close() - - var currentSection string = "" - var currentName string = "" - - rs.gitConfig = new(GitConfig) - rs.gitConfig.core = make(map[string]string) - rs.gitConfig.remotes = make(map[string]*remote) - rs.gitConfig.branches = make(map[string]*branch) - rs.gitConfig.submodules = make(map[string]string) - rs.gitConfig.versions = make(map[string]string) - rs.gitConfig.hashes = make(map[string]string) - - scanner := bufio.NewScanner(file) - for scanner.Scan() { - line := strings.TrimSpace(scanner.Text()) - - // Skip empty lines and comments - if line == "" || strings.HasPrefix(line, "#") || strings.HasPrefix(line, ";") { - continue - } - - // Check for section headers - if strings.HasPrefix(line, "[") && strings.HasSuffix(line, "]") { - line = strings.Trim(line, "[]") - parts := strings.Split(line, " ") - currentSection = parts[0] - - if len(parts) == 2 { - line = strings.Trim(line, "[]") - currentName = strings.Trim(parts[1], "\"") - } - continue - } - - partsNew := strings.SplitN(line, "=", 2) - if len(partsNew) != 2 { - log.Log(WARN, "error on config section:", currentSection, "line:", line) - } - - key := strings.TrimSpace(partsNew[0]) - key = strings.TrimSuffix(key, "\"") - - value := strings.TrimSpace(partsNew[1]) - value = strings.TrimSuffix(value, "\"") - - switch currentSection { - case "core": - rs.gitConfig.core[key] = value - case "gui": - // don't really need gui stuff right now - case "pull": - // don't store git config pull settings here - // probably has 'rebase = false' - case "remote": - test, ok := rs.gitConfig.remotes[currentName] - if !ok { - test = new(remote) - rs.gitConfig.remotes[currentName] = test - } - log.Log(INFO, "switch currentSection", currentSection, currentName) - switch key { - case "url": - if test.url == value { - continue - } - if test.url == "" { - test.url = value - continue - } - log.Log(REPO, "error url mismatch", test.url, value) - case "fetch": - if test.fetch == value { - continue - } - if test.fetch == "" { - test.fetch = value - continue - } - log.Log(REPO, "error fetch mismatch", test.fetch, value) - default: - log.Log(REPO, "unknown remote:", line) - } - case "branch": - test, ok := rs.gitConfig.branches[currentName] - if !ok { - test = new(branch) - rs.gitConfig.branches[currentName] = test - rs.processBranch(currentName) - } - switch key { - case "remote": - rs.gitConfig.branches[currentName].remote = value - case "merge": - rs.gitConfig.branches[currentName].merge = value - default: - log.Log(REPO, "error unknown remote:", currentSection, currentName, key, value) - log.Log(REPO, "unknown branch:", line) - } - case "submodule": - // test, ok := rs.gitConfig.submodules[currentName] - switch key { - case "active": - // probably 'true' or 'false' - case "url": - rs.gitConfig.submodules[currentName] = value - default: - log.Log(REPOWARN, "unknown submodule line:", line) - } - default: - log.Log(REPOWARN, "unknown line:", line) - } - } - - if err := scanner.Err(); err != nil { - return err - } - - return nil -} - -func (rs *RepoStatus) processBranch(branch string) { - fullpath := rs.realPath.String() - log.Log(INFO, " ", branch) - hash, ok := rs.gitConfig.hashes[branch] - filename := fullpath + "/.git/refs/heads/" + branch - log.Log(INFO, " hash: need to open", filename) - - data, err := ioutil.ReadFile(filename) - if err != nil { - log.Log(WARN, "hash: read failed", filename) - return - } - newhash := strings.TrimSpace(string(data)) - log.Log(INFO, " hash:", newhash) - rs.gitConfig.hashes[branch] = newhash - if ok { - if hash != newhash { - log.Log(WARN, "hash changed", hash) - } - } - - name, _ := rs.gitDescribeByHash(newhash) - rs.gitConfig.versions[newhash] = name - log.Log(INFO, " hash: version", name) -} diff --git a/modifyBox.go b/modifyBox.go index 2373053..4490514 100644 --- a/modifyBox.go +++ b/modifyBox.go @@ -23,18 +23,18 @@ func (rs *RepoStatus) drawGitCommands(box *gui.Node) { }) newgrid.NewButton("show .git/config", func() { - if rs.gitConfig == nil { + if rs.pb.GitConfig == nil { log.Log(WARN, "Nonexistant or damaged .git/config", rs.Path()) return } log.Log(WARN, ".git/config:", rs.realPath.String()) // The info: - for name, remote := range rs.gitConfig.remotes { - log.Log(WARN, " ", name, "url:", remote.url) + for name, remote := range rs.pb.GitConfig.Remotes { + log.Log(WARN, " ", name, "url:", remote.Url) } - for name, branch := range rs.gitConfig.branches { - log.Log(WARN, " ", name, "remote:", branch.remote, "merge", branch.merge) + for name, branch := range rs.pb.GitConfig.Branches { + log.Log(WARN, " ", name, "remote:", branch.Remote, "merge", branch.Merge) } }) newgrid.NextRow() diff --git a/new.go b/new.go index 542857c..6a0c81b 100644 --- a/new.go +++ b/new.go @@ -54,7 +54,7 @@ func NewRepoStatusWindow(repo *gitpb.Repo) (*RepoStatus, error) { // realpath := repo.FullPath // isGoLang := true - rs.tags = make(map[string]string) + // rs.tags = make(map[string]string) rs.window = gadgets.RawBasicWindow("GO Repo Details " + path) rs.window.Horizontal() rs.window.Make() @@ -86,7 +86,7 @@ func NewRepoStatusWindow(repo *gitpb.Repo) (*RepoStatus, error) { // add all the tags rs.makeTagBox(box2) - rs.readGitConfig() + // rs.readGitConfig() if rs.pb.GetReadOnly() { rs.readOnly.SetValue("true") diff --git a/structs.go b/structs.go index 7436ea3..72f7fa6 100644 --- a/structs.go +++ b/structs.go @@ -10,8 +10,8 @@ type RepoStatus struct { ready bool changed bool // keeps track of changes that might have happened changes string - tags map[string]string - InitOk bool // it takes a second or so to init these + // tags map[string]string + InitOk bool // it takes a second or so to init these pb *gitpb.Repo // the protobuf @@ -74,7 +74,7 @@ type RepoStatus struct { speed *gadgets.OneLiner speedActual *gadgets.OneLiner - gitConfig *GitConfig + // gitConfig *GitConfig // goConfig GoConfig switchBranchB *gui.Node diff --git a/update.go b/update.go index e17e12c..180788f 100644 --- a/update.go +++ b/update.go @@ -21,7 +21,7 @@ func (rs *RepoStatus) Update() { rs.currentVersion.SetValue(out) // read in the tags - rs.populateTags() + // rs.populateTags() // record if the repo is dirty pb.CheckDirty()