diff options
| -rw-r--r-- | age.go | 19 | ||||
| -rw-r--r-- | reloadMtime.go | 46 |
2 files changed, 49 insertions, 16 deletions
@@ -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) |
