summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2024-12-17 20:48:23 -0600
committerJeff Carr <[email protected]>2024-12-17 20:48:23 -0600
commitbea54091d2901d00c03541be09f33ae29e72cde1 (patch)
tree8d7e1257b88202532d59de35fd4d71a43c837544
parent10cc012a125e80ffb95dbc28c99d443e4427a0ba (diff)
try to fix Current branch and version
-rw-r--r--common.go14
-rw-r--r--isPrimitive.go4
-rw-r--r--mtime.go (renamed from changed.go)66
-rw-r--r--reload.go8
4 files changed, 88 insertions, 4 deletions
diff --git a/common.go b/common.go
index cd88d45..6065b8c 100644
--- a/common.go
+++ b/common.go
@@ -21,3 +21,17 @@ func (repo *Repo) GetGoPath() string {
}
return repo.GoInfo.GoPath
}
+
+func (repo *Repo) GetGoPrimitive() bool {
+ if repo.GoInfo == nil {
+ return false
+ }
+ return repo.GoInfo.GoPrimitive
+}
+
+func (repo *Repo) SetGoPrimitive(b bool) {
+ if repo.GoInfo == nil {
+ repo.GoInfo = new(GoInfo)
+ }
+ repo.GoInfo.GoPrimitive = b
+}
diff --git a/isPrimitive.go b/isPrimitive.go
index a632e1a..a3ecbba 100644
--- a/isPrimitive.go
+++ b/isPrimitive.go
@@ -18,7 +18,7 @@ import (
// deprecate use of IsPrimitive() to this function
// this assumes go.mod and go.sum are in a releasable state
func (repo *Repo) SetPrimitive() error {
- _, err := repo.IsPrimitive()
+ _, err := repo.computePrimitive()
return err
}
@@ -26,7 +26,7 @@ func (repo *Repo) SetPrimitive() error {
// will return true if the repo is truly not dependent on _anything_ else
// like spew or lib/widget
// it assumes go mod ran init and tidy ran without error
-func (repo *Repo) IsPrimitive() (bool, error) {
+func (repo *Repo) computePrimitive() (bool, error) {
// go mod init & go mod tidy ran without errors
log.Log(GITPB, "isPrimativeGoMod()", repo.FullPath)
tmp := filepath.Join(repo.FullPath, "go.mod")
diff --git a/changed.go b/mtime.go
index 4d6fed4..17cec9c 100644
--- a/changed.go
+++ b/mtime.go
@@ -44,6 +44,56 @@ func (repo *Repo) changedDir() bool {
return true
}
+func (repo *Repo) didFileChange(fname string, pbtime *timestamppb.Timestamp) bool {
+ fileTime := repo.Mtime(fname)
+ if fileTime == nil {
+ // file missing, assume changed
+ return true
+ }
+ mtime := timestamppb.New(*fileTime)
+ if pbtime == nil {
+ // mtime has not been stored yet
+ return true
+ }
+ if (pbtime.Seconds == mtime.Seconds) && (pbtime.Nanos == mtime.Nanos) {
+ // it's the same!
+ return false
+ }
+ // need to reload from the filesystem
+ return false
+}
+
+// boo. I'm not good at golang. this should use reflect. I'm bad. my code is bad. boo this man. you're cool, I'm outta here
+// make this work right someday
+func (repo *Repo) updateMtime(fname string, pbname string) bool {
+ fileTime := repo.Mtime(fname)
+ if fileTime == nil {
+ // .git/HEAD doesn't exist. something is wrong. rescan this repo
+ return true
+ }
+ mtime := timestamppb.New(*fileTime)
+ pbtime := repo.Times.MtimeHead
+ if pbtime == nil { // this can happen?
+ repo.Times.MtimeHead = mtime
+ return true
+ }
+ switch pbname {
+ case "MtimeHead":
+ if pbtime == nil { // this can happen?
+ repo.Times.MtimeHead = mtime
+ return true
+ }
+ default:
+ }
+ if (pbtime.Seconds == mtime.Seconds) && (pbtime.Nanos == mtime.Nanos) {
+ return false
+ }
+ dur := mtime.AsTime().Sub(pbtime.AsTime())
+ repo.StateChange = fmt.Sprintf("%s changed %s", fname, shell.FormatDuration(dur))
+ repo.Times.MtimeHead = mtime
+ return true
+}
+
func (repo *Repo) changedHead() bool {
fname := ".git/HEAD"
fileTime := repo.Mtime(fname)
@@ -89,7 +139,7 @@ func (repo *Repo) changedIndex() bool {
return true
}
-func (repo *Repo) RepoChanged() bool {
+func (repo *Repo) updateMtimes() bool {
var changed bool
if repo.Times == nil {
repo.Times = new(GitTimes)
@@ -108,3 +158,17 @@ func (repo *Repo) RepoChanged() bool {
return changed
}
+
+func (repo *Repo) DidRepoChange() bool {
+ if repo.didFileChange(".git/HEAD", repo.Times.MtimeHead) {
+ return true
+ }
+ if repo.didFileChange(".git/index", repo.Times.MtimeIndex) {
+ return true
+ }
+ if repo.didFileChange(".git", repo.Times.MtimeDir) {
+ // todo: do something with CheckDirty()
+ // return true
+ }
+ return false
+}
diff --git a/reload.go b/reload.go
index 0168ea8..f86001c 100644
--- a/reload.go
+++ b/reload.go
@@ -6,19 +6,25 @@ import (
"go.wit.com/log"
)
+// TODO: fix and clean this up. this is a work in progress
func (repo *Repo) Reload() error {
repo.Tags = new(GitTags)
repo.reloadGitTags()
repo.GoDeps = new(GoDeps)
+ if repo.GoInfo == nil {
+ repo.GoInfo = new(GoInfo)
+ }
repo.ParseGoSum()
repo.setLastTag()
repo.setCurrentBranchName()
+ repo.setCurrentBranchVersion()
+
repo.setRepoType()
// everything has been checked, now save the mtime's
- repo.RepoChanged()
+ repo.updateMtimes()
return nil
}