summaryrefslogtreecommitdiff
path: root/gitConfig.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-01-18 15:48:52 -0600
committerJeff Carr <[email protected]>2025-01-18 15:48:52 -0600
commitac2958e5598a33230caa81a307cde211f1be07cc (patch)
tree167d8787de450e7c6e98474e147e8047b9adfdd8 /gitConfig.go
parenta15d447fbd49c2ef7732abc77c973a2469fdac99 (diff)
code now moved to gitpbv0.22.33
Diffstat (limited to 'gitConfig.go')
-rw-r--r--gitConfig.go194
1 files changed, 0 insertions, 194 deletions
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)
-}