summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--age.go19
-rw-r--r--reloadMtime.go46
2 files changed, 49 insertions, 16 deletions
diff --git a/age.go b/age.go
index 925d837..7849417 100644
--- a/age.go
+++ b/age.go
@@ -5,7 +5,6 @@ package gitpb
import (
"errors"
- "os"
"path/filepath"
"time"
@@ -13,17 +12,17 @@ import (
)
func (repo *Repo) LastGitPull() (time.Time, error) {
- return repo.oldMtime(".git/FETCH_HEAD")
+ return repo.statMtime(".git/FETCH_HEAD")
}
func (repo *Repo) GoSumAge() (time.Duration, error) {
var mtime time.Time
var err error
- mtime, err = repo.oldMtime("go.sum")
+ mtime, err = repo.statMtime("go.sum")
if err == nil {
return time.Since(mtime), nil
}
- mtime, err = repo.oldMtime("go.mod")
+ mtime, err = repo.statMtime("go.mod")
if err == nil {
return time.Since(mtime), nil
}
@@ -50,7 +49,7 @@ func (repo *Repo) GitChanged() bool {
func (repo *Repo) GitPullAge() time.Duration {
// lastpull, err := repo.LastGitPull()
- lasttime, err := repo.oldMtime(".git/FETCH_HEAD")
+ lasttime, err := repo.statMtime(".git/FETCH_HEAD")
if err != nil {
// if error, something is wrong, assume true
log.Info("GitPullAge missing .git/FETCH_HEAD", repo.FullPath)
@@ -60,13 +59,3 @@ func (repo *Repo) GitPullAge() time.Duration {
return time.Since(lasttime)
}
-
-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(WARN, "Mtime() os.Stat() error", pathf, err)
- return time.Now(), err
-}
diff --git a/reloadMtime.go b/reloadMtime.go
index e3ed1f3..37ad2b6 100644
--- a/reloadMtime.go
+++ b/reloadMtime.go
@@ -4,6 +4,8 @@ package gitpb
import (
"fmt"
+ "os"
+ "path/filepath"
"time"
"go.wit.com/lib/gui/shell"
@@ -13,7 +15,7 @@ import (
func (repo *Repo) Mtime(fname string) *time.Time {
var fileTime *time.Time
- tmp, err := repo.oldMtime(fname)
+ tmp, err := repo.statMtime(fname)
fileTime = &tmp
if err != nil {
log.Info("MTime got err", err)
@@ -22,6 +24,16 @@ func (repo *Repo) Mtime(fname string) *time.Time {
return fileTime
}
+func (repo *Repo) statMtime(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(WARN, "Mtime() os.Stat() error", pathf, err)
+ return time.Now(), err
+}
+
func (repo *Repo) changedDir() bool {
fname := ".git"
fileTime := repo.Mtime(fname)
@@ -189,6 +201,38 @@ func (repo *Repo) reloadMtimes() bool {
return changed
}
+// also checks .git which seems to change *a lot*
+// this might work immediately after git checkout
+func (repo *Repo) DidRepoChangeDir() error {
+ if repo.Times == nil {
+ repo.Times = new(GitTimes)
+ }
+ if repo.didFileChange(".git/HEAD", repo.Times.MtimeHead) {
+ return log.Errorf(".git/HEAD changed")
+ }
+ if repo.didFileChange(".git/index", repo.Times.MtimeIndex) {
+ return log.Errorf(".git/index changed")
+ }
+ if repo.didFileChange(".git/config", repo.Times.MtimeConfig) {
+ return log.Errorf(".git/config changed")
+ }
+ if repo.didFileChange(".git", repo.Times.MtimeDir) {
+ // todo: do something with CheckDirty()
+ return log.Errorf(".git changed")
+ }
+ if repo.Times.LastUpdate == nil {
+ log.Info("repo.Reload() was never run")
+ return log.Errorf("Reload() ran for the first time")
+ } else {
+ if repo.Times.LastUpdate.Seconds < repo.Times.MtimeHead.Seconds {
+ log.Info("SHOULD RUN Reload() here", repo.Times.MtimeHead.Seconds-repo.Times.LastUpdate.Seconds, "secs diff")
+ return log.Errorf("Reload() time skew on .git/HEAD")
+ }
+ }
+ // log.Info("DidRepoChange() is false", repo.FullPath)
+ return nil
+}
+
func (repo *Repo) DidRepoChange() error {
if repo.Times == nil {
repo.Times = new(GitTimes)