···27 h plumbing.Hash
28}
2930-type TagList struct {
31- refs []*TagReference
32- r *git.Repository
33-}
34-35// TagReference is used to list both tag and non-annotated tags.
36// Non-annotated tags should only contains a reference.
37// Annotated tags should contain its reference and its tag information.
···48 mode fs.FileMode
49 modTime time.Time
50 isDir bool
51-}
52-53-func (self *TagList) Len() int {
54- return len(self.refs)
55-}
56-57-func (self *TagList) Swap(i, j int) {
58- self.refs[i], self.refs[j] = self.refs[j], self.refs[i]
59-}
60-61-// sorting tags in reverse chronological order
62-func (self *TagList) Less(i, j int) bool {
63- var dateI time.Time
64- var dateJ time.Time
65-66- if self.refs[i].tag != nil {
67- dateI = self.refs[i].tag.Tagger.When
68- } else {
69- c, err := self.r.CommitObject(self.refs[i].ref.Hash())
70- if err != nil {
71- dateI = time.Now()
72- } else {
73- dateI = c.Committer.When
74- }
75- }
76-77- if self.refs[j].tag != nil {
78- dateJ = self.refs[j].tag.Tagger.When
79- } else {
80- c, err := self.r.CommitObject(self.refs[j].ref.Hash())
81- if err != nil {
82- dateJ = time.Now()
83- } else {
84- dateJ = c.Committer.When
85- }
86- }
87-88- return dateI.After(dateJ)
89}
9091func Open(path string, ref string) (*GitRepo, error) {
···27 h plumbing.Hash
28}
290000030// TagReference is used to list both tag and non-annotated tags.
31// Non-annotated tags should only contains a reference.
32// Annotated tags should contain its reference and its tag information.
···43 mode fs.FileMode
44 modTime time.Time
45 isDir bool
0000000000000000000000000000000000000046}
4748func Open(path string, ref string) (*GitRepo, error) {