1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
// Code generated by go.wit.com/apps/autogenpb DO NOT EDIT.
// go install go.wit.com/apps/autogenpb@latest
//
// This file was autogenerated with autogenpb:
// autogenpb v0.5.27 Built on 2025/10/16 17:13:05 ( 52 m)
// Theese sort.pb.go and marshal.pb.go files are autogenerated
// The autogenpb sources have example .proto files with instructions
//
package gitpb
import (
"fmt"
"sort"
"strings"
"go.wit.com/lib/env"
"go.wit.com/log"
)
func (pb *Stats) SortCtime() {
statMu.Lock()
defer statMu.Unlock()
sort.Sort(sortStatCtime(pb.Stats))
}
// sort struct by Ctime
type sortStatCtime []*Stat
func (a sortStatCtime) Len() int { return len(a) }
func (a sortStatCtime) Less(i, j int) bool {
itime := a[i].CommitTime.AsTime()
jtime := a[j].CommitTime.AsTime()
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] }
|