mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	improvement some release related code (#19867)
This commit is contained in:
		| @@ -55,7 +55,7 @@ func init() { | |||||||
| func (r *Release) loadAttributes(ctx context.Context) error { | func (r *Release) loadAttributes(ctx context.Context) error { | ||||||
| 	var err error | 	var err error | ||||||
| 	if r.Repo == nil { | 	if r.Repo == nil { | ||||||
| 		r.Repo, err = repo_model.GetRepositoryByID(r.RepoID) | 		r.Repo, err = repo_model.GetRepositoryByIDCtx(ctx, r.RepoID) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return err | 			return err | ||||||
| 		} | 		} | ||||||
| @@ -99,24 +99,12 @@ func (r *Release) HTMLURL() string { | |||||||
| } | } | ||||||
|  |  | ||||||
| // IsReleaseExist returns true if release with given tag name already exists. | // IsReleaseExist returns true if release with given tag name already exists. | ||||||
| func IsReleaseExist(repoID int64, tagName string) (bool, error) { | func IsReleaseExist(ctx context.Context, repoID int64, tagName string) (bool, error) { | ||||||
| 	if len(tagName) == 0 { | 	if len(tagName) == 0 { | ||||||
| 		return false, nil | 		return false, nil | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return db.GetEngine(db.DefaultContext).Get(&Release{RepoID: repoID, LowerTagName: strings.ToLower(tagName)}) | 	return db.GetEngine(ctx).Exist(&Release{RepoID: repoID, LowerTagName: strings.ToLower(tagName)}) | ||||||
| } |  | ||||||
|  |  | ||||||
| // InsertRelease inserts a release |  | ||||||
| func InsertRelease(rel *Release) error { |  | ||||||
| 	_, err := db.GetEngine(db.DefaultContext).Insert(rel) |  | ||||||
| 	return err |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // InsertReleasesContext insert releases |  | ||||||
| func InsertReleasesContext(ctx context.Context, rels []*Release) error { |  | ||||||
| 	_, err := db.GetEngine(ctx).Insert(rels) |  | ||||||
| 	return err |  | ||||||
| } | } | ||||||
|  |  | ||||||
| // UpdateRelease updates all columns of a release | // UpdateRelease updates all columns of a release | ||||||
| @@ -149,22 +137,20 @@ func AddReleaseAttachments(ctx context.Context, releaseID int64, attachmentUUIDs | |||||||
|  |  | ||||||
| // GetRelease returns release by given ID. | // GetRelease returns release by given ID. | ||||||
| func GetRelease(repoID int64, tagName string) (*Release, error) { | func GetRelease(repoID int64, tagName string) (*Release, error) { | ||||||
| 	isExist, err := IsReleaseExist(repoID, tagName) | 	rel := &Release{RepoID: repoID, LowerTagName: strings.ToLower(tagName)} | ||||||
|  | 	has, err := db.GetEngine(db.DefaultContext).Get(rel) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} else if !isExist { | 	} else if !has { | ||||||
| 		return nil, ErrReleaseNotExist{0, tagName} | 		return nil, ErrReleaseNotExist{0, tagName} | ||||||
| 	} | 	} | ||||||
|  | 	return rel, nil | ||||||
| 	rel := &Release{RepoID: repoID, LowerTagName: strings.ToLower(tagName)} |  | ||||||
| 	_, err = db.GetEngine(db.DefaultContext).Get(rel) |  | ||||||
| 	return rel, err |  | ||||||
| } | } | ||||||
|  |  | ||||||
| // GetReleaseByID returns release with given ID. | // GetReleaseByID returns release with given ID. | ||||||
| func GetReleaseByID(id int64) (*Release, error) { | func GetReleaseByID(ctx context.Context, id int64) (*Release, error) { | ||||||
| 	rel := new(Release) | 	rel := new(Release) | ||||||
| 	has, err := db.GetEngine(db.DefaultContext). | 	has, err := db.GetEngine(ctx). | ||||||
| 		ID(id). | 		ID(id). | ||||||
| 		Get(rel) | 		Get(rel) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|   | |||||||
| @@ -1144,7 +1144,7 @@ func LinkedRepository(a *repo_model.Attachment) (*repo_model.Repository, unit.Ty | |||||||
| 		} | 		} | ||||||
| 		return repo, unitType, err | 		return repo, unitType, err | ||||||
| 	} else if a.ReleaseID != 0 { | 	} else if a.ReleaseID != 0 { | ||||||
| 		rel, err := GetReleaseByID(a.ReleaseID) | 		rel, err := GetReleaseByID(db.DefaultContext, a.ReleaseID) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return nil, unit.TypeReleases, err | 			return nil, unit.TypeReleases, err | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ import ( | |||||||
| 	api "code.gitea.io/gitea/modules/structs" | 	api "code.gitea.io/gitea/modules/structs" | ||||||
| 	"code.gitea.io/gitea/modules/web" | 	"code.gitea.io/gitea/modules/web" | ||||||
| 	"code.gitea.io/gitea/routers/api/v1/utils" | 	"code.gitea.io/gitea/routers/api/v1/utils" | ||||||
| 	releaseservice "code.gitea.io/gitea/services/release" | 	release_service "code.gitea.io/gitea/services/release" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| // GetRelease get a single release of a repository | // GetRelease get a single release of a repository | ||||||
| @@ -49,7 +49,7 @@ func GetRelease(ctx *context.APIContext) { | |||||||
| 	//     "$ref": "#/responses/notFound" | 	//     "$ref": "#/responses/notFound" | ||||||
|  |  | ||||||
| 	id := ctx.ParamsInt64(":id") | 	id := ctx.ParamsInt64(":id") | ||||||
| 	release, err := models.GetReleaseByID(id) | 	release, err := models.GetReleaseByID(ctx, id) | ||||||
| 	if err != nil && !models.IsErrReleaseNotExist(err) { | 	if err != nil && !models.IsErrReleaseNotExist(err) { | ||||||
| 		ctx.Error(http.StatusInternalServerError, "GetReleaseByID", err) | 		ctx.Error(http.StatusInternalServerError, "GetReleaseByID", err) | ||||||
| 		return | 		return | ||||||
| @@ -202,7 +202,7 @@ func CreateRelease(ctx *context.APIContext) { | |||||||
| 			IsTag:        false, | 			IsTag:        false, | ||||||
| 			Repo:         ctx.Repo.Repository, | 			Repo:         ctx.Repo.Repository, | ||||||
| 		} | 		} | ||||||
| 		if err := releaseservice.CreateRelease(ctx.Repo.GitRepo, rel, nil, ""); err != nil { | 		if err := release_service.CreateRelease(ctx.Repo.GitRepo, rel, nil, ""); err != nil { | ||||||
| 			if models.IsErrReleaseAlreadyExist(err) { | 			if models.IsErrReleaseAlreadyExist(err) { | ||||||
| 				ctx.Error(http.StatusConflict, "ReleaseAlreadyExist", err) | 				ctx.Error(http.StatusConflict, "ReleaseAlreadyExist", err) | ||||||
| 			} else { | 			} else { | ||||||
| @@ -225,7 +225,7 @@ func CreateRelease(ctx *context.APIContext) { | |||||||
| 		rel.Repo = ctx.Repo.Repository | 		rel.Repo = ctx.Repo.Repository | ||||||
| 		rel.Publisher = ctx.Doer | 		rel.Publisher = ctx.Doer | ||||||
|  |  | ||||||
| 		if err = releaseservice.UpdateRelease(ctx.Doer, ctx.Repo.GitRepo, rel, nil, nil, nil); err != nil { | 		if err = release_service.UpdateRelease(ctx.Doer, ctx.Repo.GitRepo, rel, nil, nil, nil); err != nil { | ||||||
| 			ctx.Error(http.StatusInternalServerError, "UpdateRelease", err) | 			ctx.Error(http.StatusInternalServerError, "UpdateRelease", err) | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| @@ -271,7 +271,7 @@ func EditRelease(ctx *context.APIContext) { | |||||||
|  |  | ||||||
| 	form := web.GetForm(ctx).(*api.EditReleaseOption) | 	form := web.GetForm(ctx).(*api.EditReleaseOption) | ||||||
| 	id := ctx.ParamsInt64(":id") | 	id := ctx.ParamsInt64(":id") | ||||||
| 	rel, err := models.GetReleaseByID(id) | 	rel, err := models.GetReleaseByID(ctx, id) | ||||||
| 	if err != nil && !models.IsErrReleaseNotExist(err) { | 	if err != nil && !models.IsErrReleaseNotExist(err) { | ||||||
| 		ctx.Error(http.StatusInternalServerError, "GetReleaseByID", err) | 		ctx.Error(http.StatusInternalServerError, "GetReleaseByID", err) | ||||||
| 		return | 		return | ||||||
| @@ -300,12 +300,13 @@ func EditRelease(ctx *context.APIContext) { | |||||||
| 	if form.IsPrerelease != nil { | 	if form.IsPrerelease != nil { | ||||||
| 		rel.IsPrerelease = *form.IsPrerelease | 		rel.IsPrerelease = *form.IsPrerelease | ||||||
| 	} | 	} | ||||||
| 	if err := releaseservice.UpdateRelease(ctx.Doer, ctx.Repo.GitRepo, rel, nil, nil, nil); err != nil { | 	if err := release_service.UpdateRelease(ctx.Doer, ctx.Repo.GitRepo, rel, nil, nil, nil); err != nil { | ||||||
| 		ctx.Error(http.StatusInternalServerError, "UpdateRelease", err) | 		ctx.Error(http.StatusInternalServerError, "UpdateRelease", err) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	rel, err = models.GetReleaseByID(id) | 	// reload data from database | ||||||
|  | 	rel, err = models.GetReleaseByID(ctx, id) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		ctx.Error(http.StatusInternalServerError, "GetReleaseByID", err) | 		ctx.Error(http.StatusInternalServerError, "GetReleaseByID", err) | ||||||
| 		return | 		return | ||||||
| @@ -346,7 +347,7 @@ func DeleteRelease(ctx *context.APIContext) { | |||||||
| 	//     "$ref": "#/responses/notFound" | 	//     "$ref": "#/responses/notFound" | ||||||
|  |  | ||||||
| 	id := ctx.ParamsInt64(":id") | 	id := ctx.ParamsInt64(":id") | ||||||
| 	rel, err := models.GetReleaseByID(id) | 	rel, err := models.GetReleaseByID(ctx, id) | ||||||
| 	if err != nil && !models.IsErrReleaseNotExist(err) { | 	if err != nil && !models.IsErrReleaseNotExist(err) { | ||||||
| 		ctx.Error(http.StatusInternalServerError, "GetReleaseByID", err) | 		ctx.Error(http.StatusInternalServerError, "GetReleaseByID", err) | ||||||
| 		return | 		return | ||||||
| @@ -356,7 +357,7 @@ func DeleteRelease(ctx *context.APIContext) { | |||||||
| 		ctx.NotFound() | 		ctx.NotFound() | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	if err := releaseservice.DeleteReleaseByID(ctx, id, ctx.Doer, false); err != nil { | 	if err := release_service.DeleteReleaseByID(ctx, id, ctx.Doer, false); err != nil { | ||||||
| 		ctx.Error(http.StatusInternalServerError, "DeleteReleaseByID", err) | 		ctx.Error(http.StatusInternalServerError, "DeleteReleaseByID", err) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -98,7 +98,7 @@ func ListReleaseAttachments(ctx *context.APIContext) { | |||||||
| 	//     "$ref": "#/responses/AttachmentList" | 	//     "$ref": "#/responses/AttachmentList" | ||||||
|  |  | ||||||
| 	releaseID := ctx.ParamsInt64(":id") | 	releaseID := ctx.ParamsInt64(":id") | ||||||
| 	release, err := models.GetReleaseByID(releaseID) | 	release, err := models.GetReleaseByID(ctx, releaseID) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		ctx.Error(http.StatusInternalServerError, "GetReleaseByID", err) | 		ctx.Error(http.StatusInternalServerError, "GetReleaseByID", err) | ||||||
| 		return | 		return | ||||||
| @@ -164,7 +164,7 @@ func CreateReleaseAttachment(ctx *context.APIContext) { | |||||||
|  |  | ||||||
| 	// Check if release exists an load release | 	// Check if release exists an load release | ||||||
| 	releaseID := ctx.ParamsInt64(":id") | 	releaseID := ctx.ParamsInt64(":id") | ||||||
| 	release, err := models.GetReleaseByID(releaseID) | 	release, err := models.GetReleaseByID(ctx, releaseID) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		ctx.Error(http.StatusInternalServerError, "GetReleaseByID", err) | 		ctx.Error(http.StatusInternalServerError, "GetReleaseByID", err) | ||||||
| 		return | 		return | ||||||
|   | |||||||
| @@ -112,10 +112,10 @@ func createTag(gitRepo *git.Repository, rel *models.Release, msg string) (bool, | |||||||
|  |  | ||||||
| // CreateRelease creates a new release of repository. | // CreateRelease creates a new release of repository. | ||||||
| func CreateRelease(gitRepo *git.Repository, rel *models.Release, attachmentUUIDs []string, msg string) error { | func CreateRelease(gitRepo *git.Repository, rel *models.Release, attachmentUUIDs []string, msg string) error { | ||||||
| 	isExist, err := models.IsReleaseExist(rel.RepoID, rel.TagName) | 	has, err := models.IsReleaseExist(gitRepo.Ctx, rel.RepoID, rel.TagName) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} else if isExist { | 	} else if has { | ||||||
| 		return models.ErrReleaseAlreadyExist{ | 		return models.ErrReleaseAlreadyExist{ | ||||||
| 			TagName: rel.TagName, | 			TagName: rel.TagName, | ||||||
| 		} | 		} | ||||||
| @@ -126,7 +126,7 @@ func CreateRelease(gitRepo *git.Repository, rel *models.Release, attachmentUUIDs | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	rel.LowerTagName = strings.ToLower(rel.TagName) | 	rel.LowerTagName = strings.ToLower(rel.TagName) | ||||||
| 	if err = models.InsertRelease(rel); err != nil { | 	if err = db.Insert(gitRepo.Ctx, rel); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -143,10 +143,10 @@ func CreateRelease(gitRepo *git.Repository, rel *models.Release, attachmentUUIDs | |||||||
|  |  | ||||||
| // CreateNewTag creates a new repository tag | // CreateNewTag creates a new repository tag | ||||||
| func CreateNewTag(ctx context.Context, doer *user_model.User, repo *repo_model.Repository, commit, tagName, msg string) error { | func CreateNewTag(ctx context.Context, doer *user_model.User, repo *repo_model.Repository, commit, tagName, msg string) error { | ||||||
| 	isExist, err := models.IsReleaseExist(repo.ID, tagName) | 	has, err := models.IsReleaseExist(ctx, repo.ID, tagName) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} else if isExist { | 	} else if has { | ||||||
| 		return models.ErrTagAlreadyExists{ | 		return models.ErrTagAlreadyExists{ | ||||||
| 			TagName: tagName, | 			TagName: tagName, | ||||||
| 		} | 		} | ||||||
| @@ -174,11 +174,7 @@ func CreateNewTag(ctx context.Context, doer *user_model.User, repo *repo_model.R | |||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if err = models.InsertRelease(rel); err != nil { | 	return db.Insert(ctx, rel) | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return err |  | ||||||
| } | } | ||||||
|  |  | ||||||
| // UpdateRelease updates information, attachments of a release and will create tag if it's not a draft and tag not exist. | // UpdateRelease updates information, attachments of a release and will create tag if it's not a draft and tag not exist. | ||||||
| @@ -286,12 +282,12 @@ func UpdateRelease(doer *user_model.User, gitRepo *git.Repository, rel *models.R | |||||||
|  |  | ||||||
| // DeleteReleaseByID deletes a release and corresponding Git tag by given ID. | // DeleteReleaseByID deletes a release and corresponding Git tag by given ID. | ||||||
| func DeleteReleaseByID(ctx context.Context, id int64, doer *user_model.User, delTag bool) error { | func DeleteReleaseByID(ctx context.Context, id int64, doer *user_model.User, delTag bool) error { | ||||||
| 	rel, err := models.GetReleaseByID(id) | 	rel, err := models.GetReleaseByID(ctx, id) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return fmt.Errorf("GetReleaseByID: %v", err) | 		return fmt.Errorf("GetReleaseByID: %v", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	repo, err := repo_model.GetRepositoryByID(rel.RepoID) | 	repo, err := repo_model.GetRepositoryByIDCtx(ctx, rel.RepoID) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return fmt.Errorf("GetRepositoryByID: %v", err) | 		return fmt.Errorf("GetRepositoryByID: %v", err) | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -162,7 +162,7 @@ func TestRelease_Update(t *testing.T) { | |||||||
| 	time.Sleep(2 * time.Second) // sleep 2 seconds to ensure a different timestamp | 	time.Sleep(2 * time.Second) // sleep 2 seconds to ensure a different timestamp | ||||||
| 	release.Note = "Changed note" | 	release.Note = "Changed note" | ||||||
| 	assert.NoError(t, UpdateRelease(user, gitRepo, release, nil, nil, nil)) | 	assert.NoError(t, UpdateRelease(user, gitRepo, release, nil, nil, nil)) | ||||||
| 	release, err = models.GetReleaseByID(release.ID) | 	release, err = models.GetReleaseByID(db.DefaultContext, release.ID) | ||||||
| 	assert.NoError(t, err) | 	assert.NoError(t, err) | ||||||
| 	assert.Equal(t, int64(releaseCreatedUnix), int64(release.CreatedUnix)) | 	assert.Equal(t, int64(releaseCreatedUnix), int64(release.CreatedUnix)) | ||||||
|  |  | ||||||
| @@ -186,7 +186,7 @@ func TestRelease_Update(t *testing.T) { | |||||||
| 	time.Sleep(2 * time.Second) // sleep 2 seconds to ensure a different timestamp | 	time.Sleep(2 * time.Second) // sleep 2 seconds to ensure a different timestamp | ||||||
| 	release.Title = "Changed title" | 	release.Title = "Changed title" | ||||||
| 	assert.NoError(t, UpdateRelease(user, gitRepo, release, nil, nil, nil)) | 	assert.NoError(t, UpdateRelease(user, gitRepo, release, nil, nil, nil)) | ||||||
| 	release, err = models.GetReleaseByID(release.ID) | 	release, err = models.GetReleaseByID(db.DefaultContext, release.ID) | ||||||
| 	assert.NoError(t, err) | 	assert.NoError(t, err) | ||||||
| 	assert.Less(t, int64(releaseCreatedUnix), int64(release.CreatedUnix)) | 	assert.Less(t, int64(releaseCreatedUnix), int64(release.CreatedUnix)) | ||||||
|  |  | ||||||
| @@ -211,7 +211,7 @@ func TestRelease_Update(t *testing.T) { | |||||||
| 	release.Title = "Changed title" | 	release.Title = "Changed title" | ||||||
| 	release.Note = "Changed note" | 	release.Note = "Changed note" | ||||||
| 	assert.NoError(t, UpdateRelease(user, gitRepo, release, nil, nil, nil)) | 	assert.NoError(t, UpdateRelease(user, gitRepo, release, nil, nil, nil)) | ||||||
| 	release, err = models.GetReleaseByID(release.ID) | 	release, err = models.GetReleaseByID(db.DefaultContext, release.ID) | ||||||
| 	assert.NoError(t, err) | 	assert.NoError(t, err) | ||||||
| 	assert.Equal(t, int64(releaseCreatedUnix), int64(release.CreatedUnix)) | 	assert.Equal(t, int64(releaseCreatedUnix), int64(release.CreatedUnix)) | ||||||
|  |  | ||||||
| @@ -236,7 +236,7 @@ func TestRelease_Update(t *testing.T) { | |||||||
| 	tagName := release.TagName | 	tagName := release.TagName | ||||||
|  |  | ||||||
| 	assert.NoError(t, UpdateRelease(user, gitRepo, release, nil, nil, nil)) | 	assert.NoError(t, UpdateRelease(user, gitRepo, release, nil, nil, nil)) | ||||||
| 	release, err = models.GetReleaseByID(release.ID) | 	release, err = models.GetReleaseByID(db.DefaultContext, release.ID) | ||||||
| 	assert.NoError(t, err) | 	assert.NoError(t, err) | ||||||
| 	assert.Equal(t, tagName, release.TagName) | 	assert.Equal(t, tagName, release.TagName) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -399,7 +399,7 @@ func pushUpdateAddTags(ctx context.Context, repo *repo_model.Repository, gitRepo | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if len(newReleases) > 0 { | 	if len(newReleases) > 0 { | ||||||
| 		if err = models.InsertReleasesContext(ctx, newReleases); err != nil { | 		if err = db.Insert(ctx, newReleases); err != nil { | ||||||
| 			return fmt.Errorf("Insert: %v", err) | 			return fmt.Errorf("Insert: %v", err) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user