summaryrefslogtreecommitdiff
path: root/git.go
diff options
context:
space:
mode:
Diffstat (limited to 'git.go')
-rw-r--r--git.go336
1 files changed, 30 insertions, 306 deletions
diff --git a/git.go b/git.go
index 42255f0..3b66d9d 100644
--- a/git.go
+++ b/git.go
@@ -2,13 +2,8 @@ package repostatus
import (
"errors"
- "fmt"
- "os/user"
"strings"
"time"
- "unicode/utf8"
-
- "io/ioutil"
"go.wit.com/lib/gui/shell"
"go.wit.com/log"
@@ -44,28 +39,10 @@ func (rs *RepoStatus) Age() time.Duration {
var ErrorMissingGitConfig error = errors.New("missing .git/config")
var ErrorGitPullOnLocal error = errors.New("git pull on local only branch")
-/*
-func (rs *RepoStatus) GitPull() (string, error) {
- currentName := rs.GetCurrentBranchName()
- if rs.IsOnlyLocalTag(currentName) {
- return "", ErrorGitPullOnLocal
- }
- var cmd []string
- cmd = append(cmd, "git", "pull")
- r := rs.Run(cmd)
- output := strings.Join(r.Stdout, "\n")
- if r.Error != nil {
- output = "git error_,,,_a_,,,_b_,,,c"
- }
- if r.Error == nil {
- log.Log(REPOWARN, "git pull ran", rs.Path())
- log.Log(REPOWARN, "git pull output", output)
- } else {
- log.Log(REPOWARN, "git pull error", rs.Path(), r.Error)
- }
- return output, r.Error
+// remove this everything
+func (rs *RepoStatus) Path() string {
+ return rs.realPath.String()
}
-*/
func (rs *RepoStatus) checkoutBranch(level string, branch string) {
if rs.CheckDirty() {
@@ -90,102 +67,6 @@ func (rs *RepoStatus) checkoutBranch(level string, branch string) {
}
}
-func (rs *RepoStatus) guessDevelWorkingName() {
- if rs.TagExists("guidevel") {
- rs.develWorkingName.SetValue("guidevel")
- rs.develBranchVersion.SetLabel("guidevel")
- return
- }
- if rs.TagExists("devel") {
- rs.develWorkingName.SetValue("devel")
- rs.develBranchVersion.SetLabel("devel")
- return
- }
-
- // figure out what to do here
- rs.develWorkingName.SetValue("develFIXME")
- rs.develBranchVersion.SetLabel("develFIXME")
-}
-
-func (rs *RepoStatus) setUserWorkingName() {
- usr, _ := user.Current()
- uname := usr.Username
- if rs.TagExists(uname) {
- rs.userWorkingName.SetValue(uname)
- rs.userBranchVersion.SetLabel(uname)
- return
- }
- rs.userWorkingName.SetValue("need to create " + uname)
- rs.userBranchVersion.SetLabel("need to create " + uname)
-}
-
-// returns "master", "devel", os.Username, etc
-func (rs *RepoStatus) GetMasterBranchName() string {
- name := rs.mainWorkingName.String()
- return name
-}
-func (rs *RepoStatus) GetDevelBranchName() string {
- name := rs.develWorkingName.String()
- return name
-}
-
-func (rs *RepoStatus) GetUserBranchName() string {
- name := rs.userWorkingName.String()
- return name
-}
-
-// returns the git versions like "1.3-2-laksdjf" or whatever
-func (rs *RepoStatus) GetMasterVersion() string {
- name := rs.mainBranchVersion.String()
- return name
-}
-func (rs *RepoStatus) GetDevelVersion() string {
- name := rs.develBranchVersion.String()
- return name
-}
-func (rs *RepoStatus) GetUserVersion() string {
- name := rs.userBranchVersion.String()
- return name
-}
-
-func (rs *RepoStatus) setMasterVersion(s string) {
- old := rs.GetMasterVersion()
- if old == s {
- return
- }
- rs.mainBranchVersion.SetValue(s)
- if old == "" {
- return // don't note if there was nothing before
- }
- rs.NoteChange("master branch has been changed from " + old + " to " + s)
-}
-
-func (rs *RepoStatus) setDevelVersion(s string) {
- old := rs.GetDevelVersion()
- if old == s {
- return
- }
- if old == "" {
- // don't note nothing
- } else {
- rs.NoteChange("devel branch has been changed from " + old + " to " + s)
- }
- rs.develBranchVersion.SetValue(s)
-}
-
-func (rs *RepoStatus) setUserVersion(s string) {
- old := rs.GetUserVersion()
- if old == s {
- return
- }
- if old == "" {
- // don't note nothing
- } else {
- rs.NoteChange("user branch has been changed from " + old + " to " + s)
- }
- rs.userBranchVersion.SetValue(s)
-}
-
func (rs *RepoStatus) GitState() string {
return rs.gitState.String()
}
@@ -200,105 +81,48 @@ func (rs *RepoStatus) GetStatus() string {
}
func (rs *RepoStatus) setState() {
+ pb := rs.pb
rs.changed = false
- if rs.CheckDirty() {
+ if pb.CheckDirty() {
log.Log(REPO, "CheckDirty() true")
rs.gitState.SetText("dirty")
return
}
- if rs.GetUserVersion() != rs.GetDevelVersion() {
+ if pb.GetUserVersion() != pb.GetDevelVersion() {
rs.gitState.SetText("merge to devel")
return
}
- if rs.GetDevelVersion() != rs.GetMasterVersion() {
+ if pb.GetDevelVersion() != pb.GetMasterVersion() {
rs.gitState.SetText("merge to main")
return
}
- if rs.lasttag.String() != rs.GetMasterVersion() {
+ if pb.GetLastTag() != pb.GetMasterVersion() {
rs.gitState.SetText("unchanged")
return
}
- if rs.CheckBranches() {
+ if pb.CheckBranches() {
log.Log(REPO, "Branches are Perfect")
rs.gitState.SetText("PERFECT")
return
}
- log.Log(REPO, rs.String(), "Branches are not Perfect")
+ log.Log(REPO, "FIND THIS IN REPO STATUS Branches are not Perfect")
+ log.Log(REPO, "FIND THIS IN REPO STATUS Branches are not Perfect")
+ log.Log(REPO, "FIND THIS IN REPO STATUS Branches are not Perfect")
+ log.Log(REPO, "FIND THIS IN REPO STATUS Branches are not Perfect")
rs.gitState.SetText("unknown branches")
}
-// TODO: make this report the error somewhere
-// This is supposed to check all the branches to make sure
-// the 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 (rs *RepoStatus) CheckBranches() bool {
- var hashCheck string
- var perfect bool = true
- all := rs.getBranches()
- path := rs.realPath.String() + "/.git/refs/"
- for _, b := range all {
- parts := strings.Split(b, "/")
- rdir := "heads"
- if len(parts) == 2 {
- rdir = "remotes"
- }
- fullfile := 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.Log(REPO, "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(rs.Path(), cmd, INFO)
- if r.Error != nil {
- log.Log(WARN, "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.Log(REPO, "notsure why this git show is here", hash)
- } else {
- // log.Log(WARN, rs.String(), hash, output, b)
- // log.Log(WARN, "UNKNOWN BRANCHES IN THIS REPO", cmd)
- rs.versionCmdOutput.SetText("UNKNOWN BRANCHES")
- perfect = false
- // parts := strings.Split(b, "/")
- // log.Warn("git push", parts)
- }
- }
- return perfect
-}
-
-/*
-// this isn't right
-func (rs *RepoStatus) LastTagAge() (time.Time, string) {
- return time.Now(), rs.lasttag.String()
-}
-*/
-
func (rs *RepoStatus) GetLastTagVersion() string {
return rs.lasttag.String()
}
+func (rs *RepoStatus) displayCurrentBranchName() string {
+ out := rs.pb.GetCurrentBranchName()
+ rs.currentBranch.SetValue(out)
+ return out
+}
+
// stores the current branch name
func (rs *RepoStatus) checkCurrentBranchName() string {
currentname := rs.currentBranch.String()
@@ -319,7 +143,7 @@ func (rs *RepoStatus) gitDescribeByHash(hash string) (string, error) {
if hash == "" {
return "", errors.New("hash was blank")
}
- r := shell.PathRunLog(rs.Path(), []string{"git", "describe", "--tags", "--always", hash}, INFO)
+ r := shell.PathRunLog(rs.realPath.String(), []string{"git", "describe", "--tags", "--always", hash}, INFO)
out := strings.Join(r.Stdout, "\n")
if r.Error != nil {
log.Warn("not in a git repo or bad hash?", r.Error, rs.Path())
@@ -358,8 +182,7 @@ func (rs *RepoStatus) gitDescribeByName(name string) (string, error) {
// todo: don't run git every time?
func (rs *RepoStatus) checkCurrentBranchVersion() string {
- out, _ := rs.gitDescribeByName("")
- log.Log(REPO, "checkCurrentBranchVersion()", out)
+ out := rs.pb.GetCurrentVersion()
rs.currentVersion.SetValue(out)
return out
}
@@ -406,12 +229,10 @@ func (rs *RepoStatus) getBranches() []string {
// returns quickly based on the last time it was checked
func (rs *RepoStatus) IsDirty() bool {
- if rs.dirtyLabel.String() == "no" {
- return false
- }
- return true
+ return rs.pb.IsDirty()
}
+/*
// return the list of dirty files (but ignores go.mod & go.sum)
func (rs *RepoStatus) DirtyList() []string {
var all []string
@@ -431,56 +252,18 @@ func (rs *RepoStatus) DirtyList() []string {
}
return all
}
+*/
func (rs *RepoStatus) CheckDirty() bool {
- var start string = rs.dirtyLabel.String()
- cmd := []string{"git", "status", "--porcelain"}
- r := shell.PathRunLog(rs.Path(), cmd, INFO)
- out := strings.Join(r.Stdout, "\n")
- if r.Error != nil {
- log.Warn("CheckDirty() status cmd =", cmd)
- log.Warn("CheckDirty() status out =", out)
- log.Warn("CheckDirty() status err =", r.Error)
- log.Error(r.Error, "CheckDirty() git status error")
- rs.dirtyLabel.SetValue("error")
- if start != "error" {
- rs.NoteChange("git status is in error " + fmt.Sprint(r.Error))
- }
+ if rs.pb.IsDirty() {
+ rs.dirtyLabel.SetValue("dirty")
return true
}
-
- rs.dirtyList = out
-
- // last := out[strings.LastIndex(out, "\n")+1:]
- // if last == "nothing to commit, working tree clean" {
-
- if len(rs.DirtyList()) == 0 {
- log.Log(REPO, "CheckDirty() no", rs.realPath.String())
- rs.dirtyLabel.SetValue("no")
- if start == "" {
- // don't record a change as this is the initial run
- return false
- }
- if start != "no" {
- log.Log(REPOWARN, "is no longer dirty")
- rs.NoteChange("is no longer dirty")
- }
- return false
- }
-
- rs.dirtyLabel.SetValue("dirty")
- if start == "" {
- // don't record a change as this is the initial run
- return false
- }
- if start != "dirty" {
- log.Log(REPOWARN, "is now dirty")
- rs.NoteChange("is now dirty")
- }
- return true
-
+ rs.dirtyLabel.SetValue("")
+ return false
}
+/*
func (rs *RepoStatus) CheckoutBranch(bname string) bool {
if rs.CheckDirty() {
log.Log(REPO, rs.realPath.String(), "is dirty")
@@ -507,63 +290,4 @@ func (rs *RepoStatus) CheckoutBranch(bname string) bool {
rs.checkCurrentBranchVersion()
return true
}
-
-func (rs *RepoStatus) CheckoutMaster() bool {
- if rs.CheckDirty() {
- log.Log(REPO, rs.realPath.String(), "is dirty")
- return false
- }
- mName := rs.GetMasterBranchName()
- if rs.CheckoutBranch(mName) {
- return true
- }
- return true
-}
-
-func (rs *RepoStatus) CheckoutDevel() bool {
- devel := rs.develWorkingName.String()
- // user := rs.userWorkingName.String()
- if devel == "" {
- return false
- }
- if rs.CheckDirty() {
- log.Log(REPO, rs.realPath.String(), "is dirty")
- return false
- }
-
- log.Log(REPO, "checkoutBranch", devel)
- rs.checkoutBranch("devel", devel)
- // log.Log(REPO, "checkoutBranch", user)
- // rs.checkoutBranch("user", user)
- return true
-}
-
-func (rs *RepoStatus) CheckoutUser() bool {
- bName := rs.GetUserBranchName()
- if bName == "" {
- return false
- }
- if rs.CheckDirty() {
- log.Log(REPO, rs.realPath.String(), "is dirty")
- return false
- }
- if !rs.BranchExists(bName) {
- return false
- }
- cmd := []string{"git", "checkout", bName}
- r := rs.Run(cmd)
- if r.Error != nil {
- log.Log(REPO, "git checkout error:", r.Error)
- }
-
- realname := rs.GetCurrentBranchName()
- realversion := rs.GetCurrentBranchVersion()
- log.Log(REPO, rs.realPath.String(), "realname =", realname, "realversion =", realversion)
-
- if realname != bName {
- log.Log(REPO, "git checkout failed", rs.realPath.String(), bName, "!=", realname)
- return false
- }
- rs.userBranchVersion.SetValue(realversion)
- return true
-}
+*/