summaryrefslogtreecommitdiff
path: root/stat.SortCtime.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-11-05 11:18:00 -0600
committerJeff Carr <[email protected]>2025-11-05 11:18:00 -0600
commitb7efa450a8a220625174f21ae15f9b7ea1cd3a3b (patch)
treed68c79ff27a898c80f31d78bdd8c76497aaef17a /stat.SortCtime.go
parent97ee30185a19669b0faa7150da978dcbaec4512a (diff)
almost working stat.protov0.0.181v0.0.180
Diffstat (limited to 'stat.SortCtime.go')
-rw-r--r--stat.SortCtime.go67
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] }