Skip to content

Commit 944998d

Browse files
committed
add context to tag commands
1 parent 5ec1359 commit 944998d

File tree

10 files changed

+45
-45
lines changed

10 files changed

+45
-45
lines changed

modules/git/repo_tag.go

+14-14
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,24 @@ import (
1717
const TagPrefix = "refs/tags/"
1818

1919
// CreateTag create one tag in the repository
20-
func (repo *Repository) CreateTag(name, revision string) error {
21-
_, _, err := NewCommand("tag").AddDashesAndList(name, revision).RunStdString(repo.Ctx, &RunOpts{Dir: repo.Path})
20+
func (repo *Repository) CreateTag(ctx context.Context, name, revision string) error {
21+
_, _, err := NewCommand("tag").AddDashesAndList(name, revision).RunStdString(ctx, &RunOpts{Dir: repo.Path})
2222
return err
2323
}
2424

2525
// CreateAnnotatedTag create one annotated tag in the repository
26-
func (repo *Repository) CreateAnnotatedTag(name, message, revision string) error {
27-
_, _, err := NewCommand("tag", "-a", "-m").AddDynamicArguments(message).AddDashesAndList(name, revision).RunStdString(repo.Ctx, &RunOpts{Dir: repo.Path})
26+
func (repo *Repository) CreateAnnotatedTag(ctx context.Context, name, message, revision string) error {
27+
_, _, err := NewCommand("tag", "-a", "-m").AddDynamicArguments(message).AddDashesAndList(name, revision).RunStdString(ctx, &RunOpts{Dir: repo.Path})
2828
return err
2929
}
3030

3131
// GetTagNameBySHA returns the name of a tag from its tag object SHA or commit SHA
32-
func (repo *Repository) GetTagNameBySHA(sha string) (string, error) {
32+
func (repo *Repository) GetTagNameBySHA(ctx context.Context, sha string) (string, error) {
3333
if len(sha) < 5 {
3434
return "", fmt.Errorf("SHA is too short: %s", sha)
3535
}
3636

37-
stdout, _, err := NewCommand("show-ref", "--tags", "-d").RunStdString(repo.Ctx, &RunOpts{Dir: repo.Path})
37+
stdout, _, err := NewCommand("show-ref", "--tags", "-d").RunStdString(ctx, &RunOpts{Dir: repo.Path})
3838
if err != nil {
3939
return "", err
4040
}
@@ -56,8 +56,8 @@ func (repo *Repository) GetTagNameBySHA(sha string) (string, error) {
5656
}
5757

5858
// GetTagID returns the object ID for a tag (annotated tags have both an object SHA AND a commit SHA)
59-
func (repo *Repository) GetTagID(name string) (string, error) {
60-
stdout, _, err := NewCommand("show-ref", "--tags").AddDashesAndList(name).RunStdString(repo.Ctx, &RunOpts{Dir: repo.Path})
59+
func (repo *Repository) GetTagID(ctx context.Context, name string) (string, error) {
60+
stdout, _, err := NewCommand("show-ref", "--tags").AddDashesAndList(name).RunStdString(ctx, &RunOpts{Dir: repo.Path})
6161
if err != nil {
6262
return "", err
6363
}
@@ -72,8 +72,8 @@ func (repo *Repository) GetTagID(name string) (string, error) {
7272
}
7373

7474
// GetTag returns a Git tag by given name.
75-
func (repo *Repository) GetTag(name string) (*Tag, error) {
76-
idStr, err := repo.GetTagID(name)
75+
func (repo *Repository) GetTag(ctx context.Context, name string) (*Tag, error) {
76+
idStr, err := repo.GetTagID(ctx, name)
7777
if err != nil {
7878
return nil, err
7979
}
@@ -105,7 +105,7 @@ func (repo *Repository) GetTagWithID(idStr, name string) (*Tag, error) {
105105
}
106106

107107
// GetTagInfos returns all tag infos of the repository.
108-
func (repo *Repository) GetTagInfos(page, pageSize int) ([]*Tag, int, error) {
108+
func (repo *Repository) GetTagInfos(ctx context.Context, page, pageSize int) ([]*Tag, int, error) {
109109
// Generally, refname:short should be equal to refname:lstrip=2 except core.warnAmbiguousRefs is used to select the strict abbreviation mode.
110110
// https://git-scm.com/docs/git-for-each-ref#Documentation/git-for-each-ref.txt-refname
111111
forEachRefFmt := foreachref.NewFormat("objecttype", "refname:lstrip=2", "object", "objectname", "creator", "contents", "contents:signature")
@@ -119,7 +119,7 @@ func (repo *Repository) GetTagInfos(page, pageSize int) ([]*Tag, int, error) {
119119
go func() {
120120
err := NewCommand("for-each-ref").
121121
AddOptionFormat("--format=%s", forEachRefFmt.Flag()).
122-
AddArguments("--sort", "-*creatordate", "refs/tags").Run(repo.Ctx, rc)
122+
AddArguments("--sort", "-*creatordate", "refs/tags").Run(ctx, rc)
123123
if err != nil {
124124
_ = stdoutWriter.CloseWithError(ConcatenateError(err, stderr.String()))
125125
} else {
@@ -197,7 +197,7 @@ func parseTagRef(ref map[string]string) (tag *Tag, err error) {
197197
}
198198

199199
// GetAnnotatedTag returns a Git tag by its SHA, must be an annotated tag
200-
func (repo *Repository) GetAnnotatedTag(sha string) (*Tag, error) {
200+
func (repo *Repository) GetAnnotatedTag(ctx context.Context, sha string) (*Tag, error) {
201201
id, err := NewIDFromString(sha)
202202
if err != nil {
203203
return nil, err
@@ -212,7 +212,7 @@ func (repo *Repository) GetAnnotatedTag(sha string) (*Tag, error) {
212212
}
213213

214214
// Get tag name
215-
name, err := repo.GetTagNameBySHA(id.String())
215+
name, err := repo.GetTagNameBySHA(ctx, id.String())
216216
if err != nil {
217217
return nil, err
218218
}

modules/git/repo_tag_test.go

+16-16
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ func TestRepository_GetTags(t *testing.T) {
2020
}
2121
defer bareRepo1.Close()
2222

23-
tags, total, err := bareRepo1.GetTagInfos(0, 0)
23+
tags, total, err := bareRepo1.GetTagInfos(t.Context(), 0, 0)
2424
if err != nil {
2525
assert.NoError(t, err)
2626
return
@@ -56,14 +56,14 @@ func TestRepository_GetTag(t *testing.T) {
5656
lTagName := "lightweightTag"
5757

5858
// Create the lightweight tag
59-
err = bareRepo1.CreateTag(lTagName, lTagCommitID)
59+
err = bareRepo1.CreateTag(t.Context(), lTagName, lTagCommitID)
6060
if err != nil {
6161
assert.NoError(t, err, "Unable to create the lightweight tag: %s for ID: %s. Error: %v", lTagName, lTagCommitID, err)
6262
return
6363
}
6464

6565
// and try to get the Tag for lightweight tag
66-
lTag, err := bareRepo1.GetTag(lTagName)
66+
lTag, err := bareRepo1.GetTag(t.Context(), lTagName)
6767
if err != nil {
6868
assert.NoError(t, err)
6969
return
@@ -83,20 +83,20 @@ func TestRepository_GetTag(t *testing.T) {
8383
aTagMessage := "my annotated message \n - test two line"
8484

8585
// Create the annotated tag
86-
err = bareRepo1.CreateAnnotatedTag(aTagName, aTagMessage, aTagCommitID)
86+
err = bareRepo1.CreateAnnotatedTag(t.Context(), aTagName, aTagMessage, aTagCommitID)
8787
if err != nil {
8888
assert.NoError(t, err, "Unable to create the annotated tag: %s for ID: %s. Error: %v", aTagName, aTagCommitID, err)
8989
return
9090
}
9191

9292
// Now try to get the tag for the annotated Tag
93-
aTagID, err := bareRepo1.GetTagID(aTagName)
93+
aTagID, err := bareRepo1.GetTagID(t.Context(), aTagName)
9494
if err != nil {
9595
assert.NoError(t, err)
9696
return
9797
}
9898

99-
aTag, err := bareRepo1.GetTag(aTagName)
99+
aTag, err := bareRepo1.GetTag(t.Context(), aTagName)
100100
if err != nil {
101101
assert.NoError(t, err)
102102
return
@@ -116,20 +116,20 @@ func TestRepository_GetTag(t *testing.T) {
116116
rTagCommitID := "8006ff9adbf0cb94da7dad9e537e53817f9fa5c0"
117117
rTagName := "release/" + lTagName
118118

119-
err = bareRepo1.CreateTag(rTagName, rTagCommitID)
119+
err = bareRepo1.CreateTag(t.Context(), rTagName, rTagCommitID)
120120
if err != nil {
121121
assert.NoError(t, err, "Unable to create the tag: %s for ID: %s. Error: %v", rTagName, rTagCommitID, err)
122122
return
123123
}
124124

125-
rTagID, err := bareRepo1.GetTagID(rTagName)
125+
rTagID, err := bareRepo1.GetTagID(t.Context(), rTagName)
126126
if err != nil {
127127
assert.NoError(t, err)
128128
return
129129
}
130130
assert.EqualValues(t, rTagCommitID, rTagID)
131131

132-
oTagID, err := bareRepo1.GetTagID(lTagName)
132+
oTagID, err := bareRepo1.GetTagID(t.Context(), lTagName)
133133
if err != nil {
134134
assert.NoError(t, err)
135135
return
@@ -155,16 +155,16 @@ func TestRepository_GetAnnotatedTag(t *testing.T) {
155155

156156
lTagCommitID := "6fbd69e9823458e6c4a2fc5c0f6bc022b2f2acd1"
157157
lTagName := "lightweightTag"
158-
bareRepo1.CreateTag(lTagName, lTagCommitID)
158+
bareRepo1.CreateTag(t.Context(), lTagName, lTagCommitID)
159159

160160
aTagCommitID := "8006ff9adbf0cb94da7dad9e537e53817f9fa5c0"
161161
aTagName := "annotatedTag"
162162
aTagMessage := "my annotated message"
163-
bareRepo1.CreateAnnotatedTag(aTagName, aTagMessage, aTagCommitID)
164-
aTagID, _ := bareRepo1.GetTagID(aTagName)
163+
bareRepo1.CreateAnnotatedTag(t.Context(), aTagName, aTagMessage, aTagCommitID)
164+
aTagID, _ := bareRepo1.GetTagID(t.Context(), aTagName)
165165

166166
// Try an annotated tag
167-
tag, err := bareRepo1.GetAnnotatedTag(aTagID)
167+
tag, err := bareRepo1.GetAnnotatedTag(t.Context(), aTagID)
168168
if err != nil {
169169
assert.NoError(t, err)
170170
return
@@ -175,18 +175,18 @@ func TestRepository_GetAnnotatedTag(t *testing.T) {
175175
assert.EqualValues(t, "tag", tag.Type)
176176

177177
// Annotated tag's Commit ID should fail
178-
tag2, err := bareRepo1.GetAnnotatedTag(aTagCommitID)
178+
tag2, err := bareRepo1.GetAnnotatedTag(t.Context(), aTagCommitID)
179179
assert.Error(t, err)
180180
assert.True(t, IsErrNotExist(err))
181181
assert.Nil(t, tag2)
182182

183183
// Annotated tag's name should fail
184-
tag3, err := bareRepo1.GetAnnotatedTag(aTagName)
184+
tag3, err := bareRepo1.GetAnnotatedTag(t.Context(), aTagName)
185185
assert.Errorf(t, err, "Length must be 40: %d", len(aTagName))
186186
assert.Nil(t, tag3)
187187

188188
// Lightweight Tag should fail
189-
tag4, err := bareRepo1.GetAnnotatedTag(lTagCommitID)
189+
tag4, err := bareRepo1.GetAnnotatedTag(t.Context(), lTagCommitID)
190190
assert.Error(t, err)
191191
assert.True(t, IsErrNotExist(err))
192192
assert.Nil(t, tag4)

modules/repository/repo.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ func (shortRelease) TableName() string {
294294
// repositories like https://github.com/vim/vim (with over 13000 tags).
295295
func pullMirrorReleaseSync(ctx context.Context, repo *repo_model.Repository, gitRepo *git.Repository) error {
296296
log.Trace("pullMirrorReleaseSync: rebuilding releases for pull-mirror Repo[%d:%s/%s]", repo.ID, repo.OwnerName, repo.Name)
297-
tags, numTags, err := gitRepo.GetTagInfos(0, 0)
297+
tags, numTags, err := gitRepo.GetTagInfos(ctx, 0, 0)
298298
if err != nil {
299299
return fmt.Errorf("unable to GetTagInfos in pull-mirror Repo[%d:%s/%s]: %w", repo.ID, repo.OwnerName, repo.Name, err)
300300
}

routers/api/v1/repo/tag.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func ListTags(ctx *context.APIContext) {
5555

5656
listOpts := utils.GetListOptions(ctx)
5757

58-
tags, total, err := ctx.Repo.GitRepo.GetTagInfos(listOpts.Page, listOpts.PageSize)
58+
tags, total, err := ctx.Repo.GitRepo.GetTagInfos(ctx, listOpts.Page, listOpts.PageSize)
5959
if err != nil {
6060
ctx.APIErrorInternal(err)
6161
return
@@ -107,7 +107,7 @@ func GetAnnotatedTag(ctx *context.APIContext) {
107107
return
108108
}
109109

110-
if tag, err := ctx.Repo.GitRepo.GetAnnotatedTag(sha); err != nil {
110+
if tag, err := ctx.Repo.GitRepo.GetAnnotatedTag(ctx, sha); err != nil {
111111
ctx.APIError(http.StatusBadRequest, err)
112112
} else {
113113
commit, err := tag.Commit(ctx.Repo.GitRepo)
@@ -148,7 +148,7 @@ func GetTag(ctx *context.APIContext) {
148148
// "$ref": "#/responses/notFound"
149149
tagName := ctx.PathParam("*")
150150

151-
tag, err := ctx.Repo.GitRepo.GetTag(tagName)
151+
tag, err := ctx.Repo.GitRepo.GetTag(ctx, tagName)
152152
if err != nil {
153153
ctx.APIErrorNotFound(tagName)
154154
return
@@ -218,7 +218,7 @@ func CreateTag(ctx *context.APIContext) {
218218
return
219219
}
220220

221-
tag, err := ctx.Repo.GitRepo.GetTag(form.TagName)
221+
tag, err := ctx.Repo.GitRepo.GetTag(ctx, form.TagName)
222222
if err != nil {
223223
ctx.APIErrorInternal(err)
224224
return

services/release/release.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -106,15 +106,15 @@ func createTag(ctx context.Context, gitRepo *git.Repository, rel *repo_model.Rel
106106
}
107107

108108
if len(msg) > 0 {
109-
if err = gitRepo.CreateAnnotatedTag(rel.TagName, msg, commit.ID.String()); err != nil {
109+
if err = gitRepo.CreateAnnotatedTag(ctx, rel.TagName, msg, commit.ID.String()); err != nil {
110110
if strings.Contains(err.Error(), "is not a valid tag name") {
111111
return false, ErrInvalidTagName{
112112
TagName: rel.TagName,
113113
}
114114
}
115115
return false, err
116116
}
117-
} else if err = gitRepo.CreateTag(rel.TagName, commit.ID.String()); err != nil {
117+
} else if err = gitRepo.CreateTag(ctx, rel.TagName, commit.ID.String()); err != nil {
118118
if strings.Contains(err.Error(), "is not a valid tag name") {
119119
return false, ErrInvalidTagName{
120120
TagName: rel.TagName,

services/repository/push.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ func pushUpdateAddTags(ctx context.Context, repo *repo_model.Repository, gitRepo
356356
emailToUser := make(map[string]*user_model.User)
357357

358358
for i, lowerTag := range lowerTags {
359-
tag, err := gitRepo.GetTag(tags[i])
359+
tag, err := gitRepo.GetTag(ctx, tags[i])
360360
if err != nil {
361361
return fmt.Errorf("GetTag: %w", err)
362362
}

tests/integration/api_releases_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ func TestAPICreateAndUpdateRelease(t *testing.T) {
114114
assert.NoError(t, err)
115115
defer gitRepo.Close()
116116

117-
err = gitRepo.CreateTag("v0.0.1", "master")
117+
err = gitRepo.CreateTag(t.Context(), "v0.0.1", "master")
118118
assert.NoError(t, err)
119119

120120
target, err := gitRepo.GetTagCommitID("v0.0.1")
@@ -202,7 +202,7 @@ func TestAPICreateReleaseToDefaultBranchOnExistingTag(t *testing.T) {
202202
assert.NoError(t, err)
203203
defer gitRepo.Close()
204204

205-
err = gitRepo.CreateTag("v0.0.1", "master")
205+
err = gitRepo.CreateTag(t.Context(), "v0.0.1", "master")
206206
assert.NoError(t, err)
207207

208208
createNewReleaseUsingAPI(t, token, owner, repo, "v0.0.1", "", "v0.0.1", "test")

tests/integration/api_repo_get_contents_list_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func testAPIGetContentsList(t *testing.T, u *url.URL) {
8484
commitID, _ := gitRepo.GetBranchCommitID(repo1.DefaultBranch)
8585
// Make a new tag in repo1
8686
newTag := "test_tag"
87-
err = gitRepo.CreateTag(newTag, commitID)
87+
err = gitRepo.CreateTag(t.Context(), newTag, commitID)
8888
assert.NoError(t, err)
8989
/*** END SETUP ***/
9090

tests/integration/api_repo_get_contents_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ func testAPIGetContents(t *testing.T, u *url.URL) {
8888
assert.NoError(t, err)
8989
// Make a new tag in repo1
9090
newTag := "test_tag"
91-
err = gitRepo.CreateTag(newTag, commitID)
91+
err = gitRepo.CreateTag(t.Context(), newTag, commitID)
9292
assert.NoError(t, err)
9393
/*** END SETUP ***/
9494

tests/integration/api_repo_git_tags_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,12 @@ func TestAPIGitTags(t *testing.T) {
3838

3939
commit, _ := gitRepo.GetBranchCommit("master")
4040
lTagName := "lightweightTag"
41-
gitRepo.CreateTag(lTagName, commit.ID.String())
41+
gitRepo.CreateTag(t.Context(), lTagName, commit.ID.String())
4242

4343
aTagName := "annotatedTag"
4444
aTagMessage := "my annotated message"
45-
gitRepo.CreateAnnotatedTag(aTagName, aTagMessage, commit.ID.String())
46-
aTag, _ := gitRepo.GetTag(aTagName)
45+
gitRepo.CreateAnnotatedTag(t.Context(), aTagName, aTagMessage, commit.ID.String())
46+
aTag, _ := gitRepo.GetTag(t.Context(), aTagName)
4747

4848
// SHOULD work for annotated tags
4949
req := NewRequestf(t, "GET", "/api/v1/repos/%s/%s/git/tags/%s", user.Name, repo.Name, aTag.ID.String()).

0 commit comments

Comments
 (0)