gitpb/reloadBranches.go

117 lines
2.9 KiB
Go

package gitpb
import (
"io/ioutil"
"os"
"path/filepath"
"strings"
"unicode/utf8"
"go.wit.com/lib/gui/shell"
"go.wit.com/log"
)
// TODO: make this report the error somewhere
// This is supposed to check all the branches to make sure
// they are the same. that was originally what this was for
// now I think it's jsut probably dumb old code that doesn't
// need to be here
// actually, this is to attempt to verify absolutely everything
// is pushed upstream before doing a rm -rf ~/go/src
// TODO: revisit this code in the autotypist later
func (repo *Repo) CheckBranches() bool {
var hashCheck string
var perfect bool = true
all := repo.getBranches()
path := filepath.Join(repo.FullPath, ".git/refs/")
for _, b := range all {
parts := strings.Split(b, "/")
rdir := "heads"
if len(parts) == 2 {
rdir = "remotes"
}
fullfile := filepath.Join(path, rdir, b)
// check if the ref name is "HEAD". if so, skip
runeCount := utf8.RuneCountInString(fullfile)
// Convert the string to a slice of runes
runes := []rune(fullfile)
// Slice the last 4 runes
lastFour := runes[runeCount-4:]
if string(lastFour) == "HEAD" {
log.Info("skip HEAD fullfile", fullfile)
continue
}
content, _ := ioutil.ReadFile(fullfile)
hash := strings.TrimSpace(string(content))
if hashCheck == "" {
hashCheck = hash
}
var cmd []string
cmd = append(cmd, "git", "show", "-s", "--format=%ci", hash)
r := shell.PathRunLog(repo.GetFullPath(), cmd, GITPB)
if r.Error != nil {
log.Log(GITPBWARN, "CheckBranches() git show error:", r.Error)
}
// git show -s --format=%ci <hash> will give you the time
// log.Log(REPO, fullfile)
if hash == hashCheck {
// log.Info("notsure why this git show is here", hash)
} else {
log.Log(GITPBWARN, repo.GetFullPath(), hash, r.Stdout, b)
log.Log(GITPBWARN, "UNKNOWN BRANCHES IN THIS REPO", cmd)
// repo.versionCmdOutput.SetText("UNKNOWN BRANCHES")
perfect = false
// parts := strings.Split(b, "/")
// log.Warn("git push", parts)
}
}
return perfect
}
func (repo *Repo) getBranches() []string {
var all []string
var heads []string
var remotes []string
heads = listFiles(filepath.Join(repo.GetFullPath(), "/.git/refs/heads"))
remotes = listFiles(filepath.Join(repo.GetFullPath(), "/.git/refs/remotes"))
all = heads
all = append(all, remotes...)
// for _, branch := range all {
// log.Info("getBranches()", branch)
// }
return all
}
// goes in one directory so it gets remote branch names
// old code. todo: modernize it
func listFiles(directory string) []string {
var files []string
fileInfo, err := os.ReadDir(directory)
if err != nil {
log.Error(err)
return nil
}
for _, file := range fileInfo {
if file.IsDir() {
dirname := file.Name()
newdir, _ := os.ReadDir(directory + "/" + dirname)
for _, file := range newdir {
if !file.IsDir() {
files = append(files, dirname+"/"+file.Name())
}
}
} else {
files = append(files, file.Name())
}
}
return files
}