|  | @@ -0,0 +1,52 @@
 | 
	
		
			
				|  |  | +// Copyright 2021 The Gogs Authors. All rights reserved.
 | 
	
		
			
				|  |  | +// Use of this source code is governed by a MIT-style
 | 
	
		
			
				|  |  | +// license that can be found in the LICENSE file.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +package db
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import (
 | 
	
		
			
				|  |  | +	"fmt"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	"github.com/gogs/git-module"
 | 
	
		
			
				|  |  | +)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +type Tag struct {
 | 
	
		
			
				|  |  | +	RepoPath string
 | 
	
		
			
				|  |  | +	Name     string
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	IsProtected bool
 | 
	
		
			
				|  |  | +	Commit      *git.Commit
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +func (ta *Tag) GetCommit() (*git.Commit, error) {
 | 
	
		
			
				|  |  | +	gitRepo, err := git.Open(ta.RepoPath)
 | 
	
		
			
				|  |  | +	if err != nil {
 | 
	
		
			
				|  |  | +		return nil, fmt.Errorf("open repository: %v", err)
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return gitRepo.TagCommit(ta.Name)
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +func GetTagsByPath(path string) ([]*Tag, error) {
 | 
	
		
			
				|  |  | +	gitRepo, err := git.Open(path)
 | 
	
		
			
				|  |  | +	if err != nil {
 | 
	
		
			
				|  |  | +		return nil, fmt.Errorf("open repository: %v", err)
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	names, err := gitRepo.Tags()
 | 
	
		
			
				|  |  | +	if err != nil {
 | 
	
		
			
				|  |  | +		return nil, fmt.Errorf("list tags")
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	tags := make([]*Tag, len(names))
 | 
	
		
			
				|  |  | +	for i := range names {
 | 
	
		
			
				|  |  | +		tags[i] = &Tag{
 | 
	
		
			
				|  |  | +			RepoPath: path,
 | 
	
		
			
				|  |  | +			Name:     names[i],
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return tags, nil
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +func (repo *Repository) GetTags() ([]*Tag, error) {
 | 
	
		
			
				|  |  | +	return GetTagsByPath(repo.RepoPath())
 | 
	
		
			
				|  |  | +}
 |