cerrado @ 4096e343f8c139316bab5fec6fba3d4365c3bef8

 1diff --git a/pkg/git/git.go b/pkg/git/git.go
 2index 7341c1bc3f04e6d91f17ac877bb523afd5ee19e2..a9c42ce0dd57fd28cb5824cad29dc85988209612 100644
 3--- a/pkg/git/git.go
 4+++ b/pkg/git/git.go
 5@@ -8,6 +8,7 @@ 	"fmt"
 6 	"io"
 7 	"io/fs"
 8 	"path"
 9+	"sort"
10 	"time"
11 
12 	"github.com/go-git/go-git/v5"
13@@ -26,10 +27,12 @@ type (
14 	GitRepository struct {
15 		path       string
16 		repository *git.Repository
17-
18-		ref plumbing.Hash
19-		// this is setRef when ref is setRef
20-		setRef bool
21+		ref        plumbing.Hash
22+		setRef     bool
23+	}
24+	TagReference struct {
25+		ref *plumbing.Reference
26+		tag *object.Tag
27 	}
28 	infoWrapper struct {
29 		name    string
30@@ -38,10 +41,9 @@ 		mode    fs.FileMode
31 		modTime time.Time
32 		isDir   bool
33 	}
34-
35-	TagReference struct {
36-		ref *plumbing.Reference
37-		tag *object.Tag
38+	tagList struct {
39+		refs []*TagReference
40+		r    *git.Repository
41 	}
42 )
43 
44@@ -151,6 +153,10 @@ 		return nil
45 	}); err != nil {
46 		return nil, err
47 	}
48+
49+	// tagList modify the underlying tag list.
50+	tagList := &tagList{r: g.repository, refs: tags}
51+	sort.Sort(tagList)
52 
53 	return tags, nil
54 }
55@@ -395,3 +401,40 @@ 	}
56 	return ""
57 
58 }
59+
60+func (self *tagList) Len() int {
61+	return len(self.refs)
62+}
63+
64+func (self *tagList) Swap(i, j int) {
65+	self.refs[i], self.refs[j] = self.refs[j], self.refs[i]
66+}
67+
68+func (self *tagList) Less(i, j int) bool {
69+	var dateI time.Time
70+	var dateJ time.Time
71+
72+	if self.refs[i].tag != nil {
73+		dateI = self.refs[i].tag.Tagger.When
74+	} else {
75+		c, err := self.r.CommitObject(self.refs[i].ref.Hash())
76+		if err != nil {
77+			dateI = time.Now()
78+		} else {
79+			dateI = c.Committer.When
80+		}
81+	}
82+
83+	if self.refs[j].tag != nil {
84+		dateJ = self.refs[j].tag.Tagger.When
85+	} else {
86+		c, err := self.r.CommitObject(self.refs[j].ref.Hash())
87+		if err != nil {
88+			dateJ = time.Now()
89+		} else {
90+			dateJ = c.Committer.When
91+		}
92+	}
93+
94+	return dateI.After(dateJ)
95+}