summaryrefslogtreecommitdiff
path: root/age.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2024-12-17 00:00:49 -0600
committerJeff Carr <[email protected]>2024-12-17 00:00:49 -0600
commitc53da5a9a1da1b29db24d4e1ce2b294514d99ac2 (patch)
treec39b33f43d5be87313b3c0aa0c7bb7c58b2f72b6 /age.go
parenta115ba144b00dc0339a8cf7eae6bdf2aab5fb4b5 (diff)
smarter and faster mtime logic
Diffstat (limited to 'age.go')
-rw-r--r--age.go70
1 files changed, 70 insertions, 0 deletions
diff --git a/age.go b/age.go
new file mode 100644
index 0000000..d70c863
--- /dev/null
+++ b/age.go
@@ -0,0 +1,70 @@
+package gitpb
+
+// functions that check the ages of files
+// and track if the repo needs to be re-scanned
+
+import (
+ "errors"
+ "os"
+ "path/filepath"
+ "time"
+
+ "go.wit.com/log"
+)
+
+func (repo *Repo) LastGitPull() (time.Time, error) {
+ return repo.oldMtime(".git/FETCH_HEAD")
+}
+
+func (repo *Repo) GoSumAge() (time.Duration, error) {
+ var mtime time.Time
+ var err error
+ mtime, err = repo.oldMtime("go.sum")
+ if err == nil {
+ return time.Since(mtime), nil
+ }
+ mtime, err = repo.oldMtime("go.mod")
+ if err == nil {
+ return time.Since(mtime), nil
+ }
+ now := time.Now()
+ return time.Since(now), errors.New(repo.GoPath + " go.mod missing")
+}
+
+func (repo *Repo) GitChanged() bool {
+ fullfile := filepath.Join(repo.FullPath, ".git/FETCH_HEAD")
+ lasttime, err := repo.LastGitPull()
+ if err == nil {
+ // if error, something is wrong, assume true
+ log.Info("gitpb:", fullfile, "changed")
+ return true
+ }
+ newtime := repo.LastPull.AsTime()
+
+ if lasttime == newtime {
+ return false
+ }
+ log.Info("gitpb:", fullfile, "changed")
+ return true
+}
+
+func (repo *Repo) GitPullAge() time.Duration {
+ lastpull, err := repo.LastGitPull()
+ if err == nil {
+ // if error, something is wrong, assume true
+ ltime := repo.LastPull.AsTime()
+ return time.Since(ltime)
+ }
+
+ return time.Since(lastpull)
+}
+
+func (repo *Repo) oldMtime(filename string) (time.Time, error) {
+ pathf := filepath.Join(repo.FullPath, filename)
+ statf, err := os.Stat(pathf)
+ if err == nil {
+ return statf.ModTime(), nil
+ }
+ log.Log(GITPBWARN, "Mtime() os.Stat() error", pathf, err)
+ return time.Now(), err
+}