diff options
Diffstat (limited to 'git.go')
| -rw-r--r-- | git.go | 336 |
1 files changed, 30 insertions, 306 deletions
@@ -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 -} +*/ |
