code now moved to gitpb
This commit is contained in:
parent
a15d447fbd
commit
ac2958e559
17
git.go
17
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)
|
||||
}
|
||||
*/
|
||||
|
|
194
gitConfig.go
194
gitConfig.go
|
@ -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)
|
||||
}
|
10
modifyBox.go
10
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()
|
||||
|
|
4
new.go
4
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")
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue