summaryrefslogtreecommitdiff
path: root/reloadGitConfig.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-09-11 13:40:48 -0500
committerJeff Carr <[email protected]>2025-09-11 13:40:48 -0500
commite395456c536b2458563d5e872a73e8667cc08659 (patch)
treec9976e9faecac92aeda0aca2cf60ee03a4890f1e /reloadGitConfig.go
parentcb604213743839453565a58afbb72bb63a66a9e1 (diff)
cleaning up .git/config parsing
Diffstat (limited to 'reloadGitConfig.go')
-rw-r--r--reloadGitConfig.go196
1 files changed, 0 insertions, 196 deletions
diff --git a/reloadGitConfig.go b/reloadGitConfig.go
deleted file mode 100644
index 5373e2e..0000000
--- a/reloadGitConfig.go
+++ /dev/null
@@ -1,196 +0,0 @@
-package gitpb
-
-import (
- "bufio"
- "fmt"
- "io/ioutil"
- "os"
- "path/filepath"
- "strings"
-
- "go.wit.com/log"
-)
-
-// does processing on the go.mod and go.sum files
-
-func (repo *Repo) updateGitConfig() error {
- if repo == nil {
- return fmt.Errorf("gitpb.updateGitConfig() repo == nil")
- }
- if repo.GitConfig == nil {
- repo.GitConfig = new(GitConfig)
- }
-
- repo.GitConfig.Core = make(map[string]string)
- repo.GitConfig.Remotes = make(map[string]*GitRemote)
- repo.GitConfig.Branches = make(map[string]*GitBranch)
- repo.GitConfig.Submodules = make(map[string]string)
- repo.GitConfig.Versions = make(map[string]string)
- repo.GitConfig.Hashes = make(map[string]string)
- return repo.readGitConfig()
-}
-
-// readGitConfig reads and parses the .git/config file
-func (repo *Repo) readGitConfig() error {
- filename := filepath.Join(repo.GetFullPath(), ".git/config")
- file, err := os.Open(filename)
- defer file.Close()
- if err != nil {
- return err
- }
-
- var currentSection string = ""
- var currentName 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":
- repo.GitConfig.Core[key] = value
- case "gui":
- // don't really need gui stuff right now
- case "pull":
- // don't store git config pull settings here
- // git config probably has 'rebase = false'
- case "remote":
- test, ok := repo.GitConfig.Remotes[currentName]
- if !ok {
- test = new(GitRemote)
- repo.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(INFO, "error url mismatch", test.Url, value)
- case "fetch":
- if test.Fetch == value {
- continue
- }
- if test.Fetch == "" {
- test.Fetch = value
- continue
- }
- log.Log(INFO, "error fetch mismatch", test.Fetch, value)
- default:
- log.Log(INFO, "unknown remote:", line)
- }
- case "branch":
- test, ok := repo.GitConfig.Branches[currentName]
- if !ok {
- test = new(GitBranch)
- repo.GitConfig.Branches[currentName] = test
- repo.processBranch(currentName)
- }
- switch key {
- case "remote":
- repo.GitConfig.Branches[currentName].Remote = value
- case "merge":
- repo.GitConfig.Branches[currentName].Merge = value
- default:
- log.Log(INFO, "error unknown remote:", currentSection, currentName, key, value)
- log.Log(INFO, "unknown branch:", line)
- }
- case "submodule":
- // test, ok := rs.gitConfig.submodules[currentName]
- switch key {
- case "active":
- // probably 'true' or 'false'
- case "url":
- repo.GitConfig.Submodules[currentName] = value
- default:
- log.Log(WARN, "unknown submodule line:", line)
- }
- case "diff":
- // test, ok := rs.gitConfig.submodules[currentName]
- switch key {
- case "renameLimit":
- log.Log(INFO, "name:", line)
- default:
- log.Log(WARN, "unknown name line:", filename, line)
- }
- case "user":
- // test, ok := rs.gitConfig.submodules[currentName]
- switch key {
- case "name":
- log.Log(INFO, "name:", line)
- case "email":
- log.Log(INFO, "email:", line)
- default:
- log.Log(WARN, "unknown name line:", filename, line)
- }
- case "git-bug":
- log.Log(WARN, "repo uses git-bug!", filename)
- default:
- log.Log(WARN, filename, "unknown line:", line)
- }
- }
-
- if err := scanner.Err(); err != nil {
- return err
- }
-
- return nil
-}
-
-func (repo *Repo) processBranch(branch string) {
- log.Log(INFO, " ", branch)
- hash, ok := repo.GitConfig.Hashes[branch]
- filename := filepath.Join(repo.GetFullPath() + "/.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)
- repo.GitConfig.Hashes[branch] = newhash
- if ok {
- if hash != newhash {
- log.Log(WARN, "hash changed", hash)
- }
- }
-
- name, _ := repo.gitDescribeByHash(newhash)
- repo.GitConfig.Versions[newhash] = name
- log.Log(INFO, " hash: version", name)
-}