|
@@ -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())
|
|
|
+}
|