diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2020-12-20 06:30:39 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-20 00:30:39 +0200 |
commit | 1d3a580a3e12526c6232b304a6472a5e61ad4dd3 (patch) | |
tree | 00040ad656b03fd1698eea3340513e8437899fdb /modules | |
parent | 4aabbacdfe2830e3b3808e42d6d89d6688754089 (diff) | |
download | gitea-1d3a580a3e12526c6232b304a6472a5e61ad4dd3.tar.gz gitea-1d3a580a3e12526c6232b304a6472a5e61ad4dd3.zip |
Refactor get tag to remove unnecessary steps (#14058)
* Fix tag cache bug
Diffstat (limited to 'modules')
-rw-r--r-- | modules/git/repo_tag.go | 52 |
1 files changed, 19 insertions, 33 deletions
diff --git a/modules/git/repo_tag.go b/modules/git/repo_tag.go index 3e8f80fe82..59ab702096 100644 --- a/modules/git/repo_tag.go +++ b/modules/git/repo_tag.go @@ -30,21 +30,16 @@ func (repo *Repository) CreateAnnotatedTag(name, message, revision string) error return err } -func (repo *Repository) getTag(id SHA1) (*Tag, error) { - t, ok := repo.tagCache.Get(id.String()) +func (repo *Repository) getTag(tagID SHA1, name string) (*Tag, error) { + t, ok := repo.tagCache.Get(tagID.String()) if ok { - log("Hit cache: %s", id) + log("Hit cache: %s", tagID) tagClone := *t.(*Tag) + tagClone.Name = name // This is necessary because lightweight tags may have same id return &tagClone, nil } - // Get tag name - name, err := repo.GetTagNameBySHA(id.String()) - if err != nil { - return nil, err - } - - tp, err := repo.GetTagType(id) + tp, err := repo.GetTagType(tagID) if err != nil { return nil, err } @@ -60,24 +55,9 @@ func (repo *Repository) getTag(id SHA1) (*Tag, error) { return nil, err } - // tagID defaults to the commit ID as the tag ID and then tries to get a tag ID (only annotated tags) - tagID := commitID - if tagIDStr, err := repo.GetTagID(name); err != nil { - // if the err is NotExist then we can ignore and just keep tagID as ID (is lightweight tag) - // all other errors we return - if !IsErrNotExist(err) { - return nil, err - } - } else { - tagID, err = NewIDFromString(tagIDStr) - if err != nil { - return nil, err - } - } - // If type is "commit, the tag is a lightweight tag if ObjectType(tp) == ObjectCommit { - commit, err := repo.GetCommit(id.String()) + commit, err := repo.GetCommit(commitIDStr) if err != nil { return nil, err } @@ -85,18 +65,18 @@ func (repo *Repository) getTag(id SHA1) (*Tag, error) { Name: name, ID: tagID, Object: commitID, - Type: string(ObjectCommit), + Type: tp, Tagger: commit.Committer, Message: commit.Message(), repo: repo, } - repo.tagCache.Set(id.String(), tag) + repo.tagCache.Set(tagID.String(), tag) return tag, nil } // The tag is an annotated tag with a message. - data, err := NewCommand("cat-file", "-p", id.String()).RunInDirBytes(repo.Path) + data, err := NewCommand("cat-file", "-p", tagID.String()).RunInDirBytes(repo.Path) if err != nil { return nil, err } @@ -107,11 +87,11 @@ func (repo *Repository) getTag(id SHA1) (*Tag, error) { } tag.Name = name - tag.ID = id + tag.ID = tagID tag.repo = repo tag.Type = tp - repo.tagCache.Set(id.String(), tag) + repo.tagCache.Set(tagID.String(), tag) return tag, nil } @@ -170,7 +150,7 @@ func (repo *Repository) GetTag(name string) (*Tag, error) { return nil, err } - tag, err := repo.getTag(id) + tag, err := repo.getTag(id, name) if err != nil { return nil, err } @@ -244,7 +224,13 @@ func (repo *Repository) GetAnnotatedTag(sha string) (*Tag, error) { return nil, ErrNotExist{ID: id.String()} } - tag, err := repo.getTag(id) + // Get tag name + name, err := repo.GetTagNameBySHA(id.String()) + if err != nil { + return nil, err + } + + tag, err := repo.getTag(id, name) if err != nil { return nil, err } |