From ddd95e9afc926d9e0a4a372dbf433d81c3db3207 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Sat, 24 Feb 2024 04:50:31 -0600 Subject: [PATCH] GitPull() detects local only branches --- git.go | 22 +++++++++++++++++++++- merge.go | 8 ++++++++ tagWindow.go | 29 +++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 1 deletion(-) diff --git a/git.go b/git.go index 02563a5..470882b 100644 --- a/git.go +++ b/git.go @@ -40,9 +40,29 @@ func (rs *RepoStatus) Age() time.Duration { } func (rs *RepoStatus) GitPull() error { + currentName := rs.GetCurrentBranchName() + if rs.IsOnlyLocalTag(currentName) { + log.Log(REPOWARN, rs.Path(), "can not git pull on local only branch", currentName) + return nil + } + var found bool = false + // okay, it's not local. Is it mapped in .git/config ? + for name, branch := range rs.gitConfig.branches { + log.Log(WARN, name, "remote:", branch.remote, "merge", branch.merge) + if name == currentName { + log.Log(WARN, "Found:", name, "remote:", branch.remote, "merge", branch.merge) + found = true + } + } + if ! found { + return errors.New("git config error") + } var cmd []string cmd = append(cmd, "git", "pull") - err, _, output := RunCmd(rs.realPath.String(), cmd) + err, output := rs.RunCmd(cmd) + if err != nil { + output = "git error_,,,_a_,,,_b_,,,c" + } if err == nil { log.Log(REPOWARN, "git pull ran", rs.Path()) log.Log(REPOWARN, "git pull output", output) diff --git a/merge.go b/merge.go index bd51d10..559c5af 100644 --- a/merge.go +++ b/merge.go @@ -8,6 +8,14 @@ import ( "go.wit.com/widget" ) +// used to block commits on non-user branches +func (rs *RepoStatus) IsUserBranch() bool { + if rs.GetCurrentBranchName() == rs.GetUserBranchName() { + return true + } + return false +} + func (rs *RepoStatus) MergeUserToDevel() bool { startbranch := rs.GetCurrentBranchName() devel := rs.GetDevelBranchName() diff --git a/tagWindow.go b/tagWindow.go index 683fee8..e756b49 100644 --- a/tagWindow.go +++ b/tagWindow.go @@ -318,6 +318,29 @@ func (rs *RepoStatus) LocalTagExists(findname string) bool { return false } +// returns true if 'taggy' is _ONLY_ a local tag +// this means you can not do a git pull or git push on it +func (rs *RepoStatus) IsOnlyLocalTag(taggy string) bool { + // first make sure the tag is actually even local + if !rs.LocalTagExists(taggy) { + // this means it's not even local now. + return false + } + // okay, taggy exists, does it exist in a remote repo? + for _, t := range rs.Tags.ListAll() { + tagname := t.TagString() + if strings.HasPrefix(tagname, "refs/remotes") { + path, filename := filepath.Split(tagname) + if filename == taggy { + log.Log(REPOWARN, "found tag:", path, filename, "from", rs.Path()) + return false + } + } + } + // we couldn't find the local tag anywhere remote, so it's probably only local + return true +} + func (t *Tag) Age() time.Duration { const gitLayout = "Mon Jan 2 15:04:05 2006 -0700" tagTime, _ := time.Parse(gitLayout, t.date.String()) @@ -373,3 +396,9 @@ func (rs *RepoStatus) NewestTag() *Tag { } return newest } + +func (rs *RepoStatus) DumpTags() { + for _, t := range rs.Tags.ListAll() { + log.Log(REPOWARN, "tag", t.ref.String(), t.date.String(), t.tag.String()) + } +}