package gitpb // An app to submit patches for the 30 GO GUI repos import ( "fmt" "time" "go.wit.com/lib/gui/shell" "go.wit.com/log" "google.golang.org/protobuf/types/known/timestamppb" ) func (repo *Repo) Mtime(fname string) *time.Time { var fileTime *time.Time tmp, err := repo.oldMtime(fname) fileTime = &tmp if err != nil { log.Info("MTime got err", err) return nil } return fileTime } func (repo *Repo) changedDir() bool { fname := ".git" fileTime := repo.Mtime(fname) if fileTime == nil { // .git doesn't exist. something is wrong. rescan this repo return true } pbtime := repo.Times.MtimeDir mtime := timestamppb.New(*fileTime) 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.MtimeDir = mtime return true } func (repo *Repo) changedHead() bool { fname := ".git/HEAD" fileTime := repo.Mtime(fname) if fileTime == nil { // .git/HEAD doesn't exist. something is wrong. rescan this repo return true } pbtime := repo.Times.MtimeHead mtime := timestamppb.New(*fileTime) 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) changedIndex() bool { fname := ".git/index" fileTime := repo.Mtime(fname) if fileTime == nil { // .git/index doesn't exist. something is wrong. rescan this repo return true } pbtime := repo.Times.MtimeIndex mtime := timestamppb.New(*fileTime) 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.MtimeIndex = mtime return true } func (repo *Repo) RepoChanged() bool { var changed bool if repo.Times == nil { repo.Times = new(GitTimes) log.Info(repo.FullPath, "repo.Times were nil") } if repo.changedHead() { changed = true } if repo.changedIndex() { changed = true } if repo.changedDir() { changed = true } return changed }