add NewestTag() and Tag.Age()

This commit is contained in:
Jeff Carr 2024-02-22 15:29:22 -06:00
parent 5aaf02ee3a
commit cd5f1d9d0f
4 changed files with 85 additions and 0 deletions

16
git.go
View File

@ -4,6 +4,7 @@ import (
"errors"
"os/user"
"strings"
"time"
"unicode/utf8"
"io/ioutil"
@ -19,6 +20,21 @@ func (rs *RepoStatus) GetCurrentBranchVersion() string {
return rs.currentVersion.String()
}
func (rs *RepoStatus) Age() time.Duration {
var t *Tag
t = rs.NewestTag()
if t != nil {
log.Log(REPO, "newest tag:", t.date.String(), t.tag.String(), t.Name())
return t.Age()
}
const gitLayout = "Mon Jan 2 15:04:05 2006 -0700"
const madeuptime = "Mon Jun 3 15:04:05 2013 -0700"
tagTime, _ := time.Parse(gitLayout, madeuptime)
return time.Since(tagTime)
}
/*
// this isn't right
func (rs *RepoStatus) LastTagAge() (time.Time, string) {

View File

@ -136,6 +136,9 @@ func (rs *RepoStatus) readGitConfig() error {
switch currentSection {
case "core":
rs.gitConfig.core[key] = value
case "pull":
// don't store git config pull settings here
// probably has 'rebase = false'
case "remote":
test, ok := rs.gitConfig.remotes[currentName]
if !ok {

8
new.go
View File

@ -32,6 +32,14 @@ func FindPathOld(path string) *RepoStatus {
return windowMap[path]
}
// makes a window of the status of the repo
// don't worry, you can think of it like Sierpinski carpet
// it's doesn't need to be displayed so it'll work fine even in an embedded space
func New(path string) (*RepoStatus, error) {
err, r := NewRepoStatusWindow(path)
return r, err
}
func NewRepoStatusWindow(path string) (error, *RepoStatus) {
var realpath string
var isGoLang bool = false

View File

@ -5,6 +5,8 @@ import (
"regexp"
"slices"
"strings"
"sync"
"time"
"go.wit.com/gui"
"go.wit.com/log"
@ -312,3 +314,59 @@ func (rs *RepoStatus) LocalTagExists(findname string) bool {
}
return false
}
func (t *Tag) Age() time.Duration {
const gitLayout = "Mon Jan 2 15:04:05 2006 -0700"
tagTime, _ := time.Parse(gitLayout, t.date.String())
return time.Since(tagTime)
}
func (t *Tag) Name() string {
return t.tag.String()
}
func (t *Tag) getDate() (time.Time, error) {
const gitLayout = "Mon Jan 2 15:04:05 2006 -0700"
tagTime, err := time.Parse(gitLayout, t.date.String())
if err != nil {
log.Log(REPOWARN, "tag date err", t.ref.String(), t.tag.String(), err)
return time.Now(), err
}
return tagTime, nil
}
func (rs *RepoStatus) NewestTag() *Tag {
var newest *Tag
var newestTime time.Time
var tagTime time.Time
var err error
var allTags []*Tag
var mu sync.Mutex
allTags = make([]*Tag, 0, 0)
junk := rs.Tags.ListAll()
allTags = append(allTags, junk...)
for _, t := range allTags {
mu.Lock()
if tagTime, err = t.getDate(); err != nil {
mu.Unlock()
continue
}
// log.Log(REPOWARN, "tag", t.ref.String(), t.date.String(), t.tag.String())
// if this is the first tag, use it
if newest == nil {
newestTime = tagTime
newest = t
}
// if the tag date is after the newest date, it's newer so use this tag
if tagTime.After(newestTime) {
newestTime = tagTime
newest = t
}
mu.Unlock()
}
return newest
}