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 ( | ||||
| 	"fmt" | ||||
| 	"sort" | ||||
| 
 | ||||
| 	"github.com/go-git/go-git/v5" | ||||
| 	"github.com/go-git/go-git/v5/plumbing" | ||||
|  | @ -13,6 +14,21 @@ type GitRepo struct { | |||
| 	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) { | ||||
| 	var err error | ||||
| 	g := GitRepo{} | ||||
|  | @ -94,10 +110,22 @@ func (g *GitRepo) Tags() ([]*object.Tag, error) { | |||
| 	tags := []*object.Tag{} | ||||
| 
 | ||||
| 	_ = 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) | ||||
| 		return nil | ||||
| 	}) | ||||
| 
 | ||||
| 	var tagList TagList | ||||
| 	tagList = tags | ||||
| 	sort.Sort(tagList) | ||||
| 
 | ||||
| 	return tags, nil | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue