sort tags and deduplicate
This sorts the tags reverse-chronologically. If any tags have the same name (shouldn't happen but it does in some of my repos), we use whichever one is "newer". Signed-off-by: Derek Stevens <nilix@nilfm.cc>
This commit is contained in:
parent
e782f36f19
commit
3060c752f8
28
git/git.go
28
git/git.go
|
@ -2,6 +2,7 @@ package git
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"sort"
|
||||||
|
|
||||||
"github.com/go-git/go-git/v5"
|
"github.com/go-git/go-git/v5"
|
||||||
"github.com/go-git/go-git/v5/plumbing"
|
"github.com/go-git/go-git/v5/plumbing"
|
||||||
|
@ -13,6 +14,21 @@ type GitRepo struct {
|
||||||
h plumbing.Hash
|
h plumbing.Hash
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type TagList []*object.Tag
|
||||||
|
|
||||||
|
func (self TagList) Len() int {
|
||||||
|
return len(self)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self TagList) Swap(i, j int) {
|
||||||
|
self[i], self[j] = self[j], self[i]
|
||||||
|
}
|
||||||
|
|
||||||
|
// sorting tags in reverse chronological order
|
||||||
|
func (self TagList) Less(i, j int) bool {
|
||||||
|
return self[i].Tagger.When.After(self[j].Tagger.When)
|
||||||
|
}
|
||||||
|
|
||||||
func Open(path string, ref string) (*GitRepo, error) {
|
func Open(path string, ref string) (*GitRepo, error) {
|
||||||
var err error
|
var err error
|
||||||
g := GitRepo{}
|
g := GitRepo{}
|
||||||
|
@ -94,10 +110,22 @@ func (g *GitRepo) Tags() ([]*object.Tag, error) {
|
||||||
tags := []*object.Tag{}
|
tags := []*object.Tag{}
|
||||||
|
|
||||||
_ = ti.ForEach(func(t *object.Tag) error {
|
_ = ti.ForEach(func(t *object.Tag) error {
|
||||||
|
for i, existing := range tags {
|
||||||
|
if existing.Name == t.Name {
|
||||||
|
if t.Tagger.When.After(existing.Tagger.When) {
|
||||||
|
tags[i] = t
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
tags = append(tags, t)
|
tags = append(tags, t)
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
|
var tagList TagList
|
||||||
|
tagList = tags
|
||||||
|
sort.Sort(tagList)
|
||||||
|
|
||||||
return tags, nil
|
return tags, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue