diff options
Diffstat (limited to 'stat.SortCtime.go')
| -rw-r--r-- | stat.SortCtime.go | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/stat.SortCtime.go b/stat.SortCtime.go index b8045d2..7e3b41a 100644 --- a/stat.SortCtime.go +++ b/stat.SortCtime.go @@ -10,7 +10,12 @@ package gitpb import ( + "fmt" "sort" + "strings" + + "go.wit.com/lib/env" + "go.wit.com/log" ) func (pb *Stats) SortCtime() { @@ -30,3 +35,65 @@ func (a sortStatCtime) Less(i, j int) bool { return itime.Before(jtime) } func (a sortStatCtime) Swap(i, j int) { a[i], a[j] = a[j], a[i] } + +// sort tags by Version() +// returns true if anything changed +var wasSorted bool + +func (pb *Stats) SortVersion() bool { + statMu.Lock() + defer statMu.Unlock() + + wasSorted = true + + sort.Sort(sortStatVersion(pb.Stats)) + + return wasSorted +} + +func tokVersion(r *Stat) (*Vers, error) { + var ver string + if strings.HasPrefix(r.Name, "refs/tags/") { + ver = strings.TrimPrefix(r.Name, "refs/tags/") + } else if strings.HasPrefix(r.Name, "refs/heads/") { + ver = strings.TrimPrefix(r.Name, "refs/heads/") + } else if strings.HasPrefix(r.Name, "refs/remotes/") { + ver = strings.TrimPrefix(r.Name, "refs/remotes/") + } else if strings.HasPrefix(r.Name, "refs/") { + ver = strings.TrimPrefix(r.Name, "refs/") + } else { + ver = fmt.Sprintf("%s", r.Name) + } + tok, err := TokenVersions(ver) + return tok, err +} + +// sort struct by Version +type sortStatVersion []*Stat + +func (a sortStatVersion) Len() int { return len(a) } +func (a sortStatVersion) Less(i, j int) bool { + atok, err1 := tokVersion(a[i]) + btok, err2 := tokVersion(a[j]) + _, _ = err1, err2 + cint := CompareVers(atok, btok) + if cint == 1 { + if env.True("stats") { + log.Info("false one", atok, "vs", btok, err1, err2, a[i].Name, a[j].Name) + } + return false + } + if cint == -1 { + if env.True("stats") { + log.Info("true less", atok, "vs", btok, err1, err2, err2, a[i].Name, a[j].Name) + } + wasSorted = false + return true + } + if env.True("stats") { + log.Info("false 0 ", atok, "vs", btok, err1, err2, err2, a[i].Name, a[j].Name) + } + return false +} + +func (a sortStatVersion) Swap(i, j int) { a[i], a[j] = a[j], a[i] } |
