mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Use context parameter in services/repository (#23186)
Use context parameter in `services/repository`. And use `cache.WithCacheContext(ctx)` to generate push action history feeds. Fix #23160
This commit is contained in:
		@@ -45,7 +45,7 @@ func ListUnadoptedRepositories(ctx *context.APIContext) {
 | 
				
			|||||||
	if listOptions.Page == 0 {
 | 
						if listOptions.Page == 0 {
 | 
				
			||||||
		listOptions.Page = 1
 | 
							listOptions.Page = 1
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	repoNames, count, err := repo_service.ListUnadoptedRepositories(ctx.FormString("query"), &listOptions)
 | 
						repoNames, count, err := repo_service.ListUnadoptedRepositories(ctx, ctx.FormString("query"), &listOptions)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		ctx.InternalServerError(err)
 | 
							ctx.InternalServerError(err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
@@ -109,7 +109,7 @@ func AdoptRepository(ctx *context.APIContext) {
 | 
				
			|||||||
		ctx.NotFound()
 | 
							ctx.NotFound()
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if _, err := repo_service.AdoptRepository(ctx.Doer, ctxUser, repo_module.CreateRepoOptions{
 | 
						if _, err := repo_service.AdoptRepository(ctx, ctx.Doer, ctxUser, repo_module.CreateRepoOptions{
 | 
				
			||||||
		Name:      repoName,
 | 
							Name:      repoName,
 | 
				
			||||||
		IsPrivate: true,
 | 
							IsPrivate: true,
 | 
				
			||||||
	}); err != nil {
 | 
						}); err != nil {
 | 
				
			||||||
@@ -172,7 +172,7 @@ func DeleteUnadoptedRepository(ctx *context.APIContext) {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := repo_service.DeleteUnadoptedRepository(ctx.Doer, ctxUser, repoName); err != nil {
 | 
						if err := repo_service.DeleteUnadoptedRepository(ctx, ctx.Doer, ctxUser, repoName); err != nil {
 | 
				
			||||||
		ctx.InternalServerError(err)
 | 
							ctx.InternalServerError(err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -118,7 +118,7 @@ func DeleteBranch(ctx *context.APIContext) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	branchName := ctx.Params("*")
 | 
						branchName := ctx.Params("*")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := repo_service.DeleteBranch(ctx.Doer, ctx.Repo.Repository, ctx.Repo.GitRepo, branchName); err != nil {
 | 
						if err := repo_service.DeleteBranch(ctx, ctx.Doer, ctx.Repo.Repository, ctx.Repo.GitRepo, branchName); err != nil {
 | 
				
			||||||
		switch {
 | 
							switch {
 | 
				
			||||||
		case git.IsErrBranchNotExist(err):
 | 
							case git.IsErrBranchNotExist(err):
 | 
				
			||||||
			ctx.NotFound(err)
 | 
								ctx.NotFound(err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -904,7 +904,7 @@ func MergePullRequest(ctx *context.APIContext) {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
			defer headRepo.Close()
 | 
								defer headRepo.Close()
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if err := repo_service.DeleteBranch(ctx.Doer, pr.HeadRepo, headRepo, pr.HeadBranch); err != nil {
 | 
							if err := repo_service.DeleteBranch(ctx, ctx.Doer, pr.HeadRepo, headRepo, pr.HeadBranch); err != nil {
 | 
				
			||||||
			switch {
 | 
								switch {
 | 
				
			||||||
			case git.IsErrBranchNotExist(err):
 | 
								case git.IsErrBranchNotExist(err):
 | 
				
			||||||
				ctx.NotFound(err)
 | 
									ctx.NotFound(err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -230,7 +230,7 @@ func CreateUserRepo(ctx *context.APIContext, owner *user_model.User, opt api.Cre
 | 
				
			|||||||
	if opt.AutoInit && opt.Readme == "" {
 | 
						if opt.AutoInit && opt.Readme == "" {
 | 
				
			||||||
		opt.Readme = "Default"
 | 
							opt.Readme = "Default"
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	repo, err := repo_service.CreateRepository(ctx.Doer, owner, repo_module.CreateRepoOptions{
 | 
						repo, err := repo_service.CreateRepository(ctx, ctx.Doer, owner, repo_module.CreateRepoOptions{
 | 
				
			||||||
		Name:          opt.Name,
 | 
							Name:          opt.Name,
 | 
				
			||||||
		Description:   opt.Description,
 | 
							Description:   opt.Description,
 | 
				
			||||||
		IssueLabels:   opt.IssueLabels,
 | 
							IssueLabels:   opt.IssueLabels,
 | 
				
			||||||
@@ -393,7 +393,7 @@ func Generate(ctx *context.APIContext) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	repo, err := repo_service.GenerateRepository(ctx.Doer, ctxUser, ctx.Repo.Repository, opts)
 | 
						repo, err := repo_service.GenerateRepository(ctx, ctx.Doer, ctxUser, ctx.Repo.Repository, opts)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		if repo_model.IsErrRepoAlreadyExist(err) {
 | 
							if repo_model.IsErrRepoAlreadyExist(err) {
 | 
				
			||||||
			ctx.Error(http.StatusConflict, "", "The repository with the same name already exists.")
 | 
								ctx.Error(http.StatusConflict, "", "The repository with the same name already exists.")
 | 
				
			||||||
@@ -637,7 +637,7 @@ func updateBasicProperties(ctx *context.APIContext, opts api.EditRepoOption) err
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	// Check if repository name has been changed and not just a case change
 | 
						// Check if repository name has been changed and not just a case change
 | 
				
			||||||
	if repo.LowerName != strings.ToLower(newRepoName) {
 | 
						if repo.LowerName != strings.ToLower(newRepoName) {
 | 
				
			||||||
		if err := repo_service.ChangeRepositoryName(ctx.Doer, repo, newRepoName); err != nil {
 | 
							if err := repo_service.ChangeRepositoryName(ctx, ctx.Doer, repo, newRepoName); err != nil {
 | 
				
			||||||
			switch {
 | 
								switch {
 | 
				
			||||||
			case repo_model.IsErrRepoAlreadyExist(err):
 | 
								case repo_model.IsErrRepoAlreadyExist(err):
 | 
				
			||||||
				ctx.Error(http.StatusUnprocessableEntity, fmt.Sprintf("repo name is already taken [name: %s]", newRepoName), err)
 | 
									ctx.Error(http.StatusUnprocessableEntity, fmt.Sprintf("repo name is already taken [name: %s]", newRepoName), err)
 | 
				
			||||||
@@ -714,7 +714,7 @@ func updateBasicProperties(ctx *context.APIContext, opts api.EditRepoOption) err
 | 
				
			|||||||
		repo.DefaultBranch = *opts.DefaultBranch
 | 
							repo.DefaultBranch = *opts.DefaultBranch
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := repo_service.UpdateRepository(repo, visibilityChanged); err != nil {
 | 
						if err := repo_service.UpdateRepository(ctx, repo, visibilityChanged); err != nil {
 | 
				
			||||||
		ctx.Error(http.StatusInternalServerError, "UpdateRepository", err)
 | 
							ctx.Error(http.StatusInternalServerError, "UpdateRepository", err)
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -368,7 +368,7 @@ func ServCommand(ctx *context.PrivateContext) {
 | 
				
			|||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		repo, err = repo_service.PushCreateRepo(user, owner, results.RepoName)
 | 
							repo, err = repo_service.PushCreateRepo(ctx, user, owner, results.RepoName)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			log.Error("pushCreateRepo: %v", err)
 | 
								log.Error("pushCreateRepo: %v", err)
 | 
				
			||||||
			ctx.JSON(http.StatusNotFound, private.ErrServCommand{
 | 
								ctx.JSON(http.StatusNotFound, private.ErrServCommand{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -96,7 +96,7 @@ func UnadoptedRepos(ctx *context.Context) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.Data["Keyword"] = q
 | 
						ctx.Data["Keyword"] = q
 | 
				
			||||||
	repoNames, count, err := repo_service.ListUnadoptedRepositories(q, &opts)
 | 
						repoNames, count, err := repo_service.ListUnadoptedRepositories(ctx, q, &opts)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		ctx.ServerError("ListUnadoptedRepositories", err)
 | 
							ctx.ServerError("ListUnadoptedRepositories", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -148,7 +148,7 @@ func AdoptOrDeleteRepository(ctx *context.Context) {
 | 
				
			|||||||
	if has || !isDir {
 | 
						if has || !isDir {
 | 
				
			||||||
		// Fallthrough to failure mode
 | 
							// Fallthrough to failure mode
 | 
				
			||||||
	} else if action == "adopt" {
 | 
						} else if action == "adopt" {
 | 
				
			||||||
		if _, err := repo_service.AdoptRepository(ctx.Doer, ctxUser, repo_module.CreateRepoOptions{
 | 
							if _, err := repo_service.AdoptRepository(ctx, ctx.Doer, ctxUser, repo_module.CreateRepoOptions{
 | 
				
			||||||
			Name:      dirSplit[1],
 | 
								Name:      dirSplit[1],
 | 
				
			||||||
			IsPrivate: true,
 | 
								IsPrivate: true,
 | 
				
			||||||
		}); err != nil {
 | 
							}); err != nil {
 | 
				
			||||||
@@ -157,7 +157,7 @@ func AdoptOrDeleteRepository(ctx *context.Context) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		ctx.Flash.Success(ctx.Tr("repo.adopt_preexisting_success", dir))
 | 
							ctx.Flash.Success(ctx.Tr("repo.adopt_preexisting_success", dir))
 | 
				
			||||||
	} else if action == "delete" {
 | 
						} else if action == "delete" {
 | 
				
			||||||
		if err := repo_service.DeleteUnadoptedRepository(ctx.Doer, ctxUser, dirSplit[1]); err != nil {
 | 
							if err := repo_service.DeleteUnadoptedRepository(ctx, ctx.Doer, ctxUser, dirSplit[1]); err != nil {
 | 
				
			||||||
			ctx.ServerError("repository.AdoptRepository", err)
 | 
								ctx.ServerError("repository.AdoptRepository", err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -137,7 +137,7 @@ func SettingsPost(ctx *context.Context) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		for _, repo := range repos {
 | 
							for _, repo := range repos {
 | 
				
			||||||
			repo.OwnerName = org.Name
 | 
								repo.OwnerName = org.Name
 | 
				
			||||||
			if err := repo_service.UpdateRepository(repo, true); err != nil {
 | 
								if err := repo_service.UpdateRepository(ctx, repo, true); err != nil {
 | 
				
			||||||
				ctx.ServerError("UpdateRepository", err)
 | 
									ctx.ServerError("UpdateRepository", err)
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -91,7 +91,7 @@ func DeleteBranchPost(ctx *context.Context) {
 | 
				
			|||||||
	defer redirect(ctx)
 | 
						defer redirect(ctx)
 | 
				
			||||||
	branchName := ctx.FormString("name")
 | 
						branchName := ctx.FormString("name")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := repo_service.DeleteBranch(ctx.Doer, ctx.Repo.Repository, ctx.Repo.GitRepo, branchName); err != nil {
 | 
						if err := repo_service.DeleteBranch(ctx, ctx.Doer, ctx.Repo.Repository, ctx.Repo.GitRepo, branchName); err != nil {
 | 
				
			||||||
		switch {
 | 
							switch {
 | 
				
			||||||
		case git.IsErrBranchNotExist(err):
 | 
							case git.IsErrBranchNotExist(err):
 | 
				
			||||||
			log.Debug("DeleteBranch: Can't delete non existing branch '%s'", branchName)
 | 
								log.Debug("DeleteBranch: Can't delete non existing branch '%s'", branchName)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -276,7 +276,7 @@ func httpBase(ctx *context.Context) (h *serviceHandler) {
 | 
				
			|||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		repo, err = repo_service.PushCreateRepo(ctx.Doer, owner, reponame)
 | 
							repo, err = repo_service.PushCreateRepo(ctx, ctx.Doer, owner, reponame)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			log.Error("pushCreateRepo: %v", err)
 | 
								log.Error("pushCreateRepo: %v", err)
 | 
				
			||||||
			ctx.Status(http.StatusNotFound)
 | 
								ctx.Status(http.StatusNotFound)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -589,7 +589,7 @@ func RetrieveRepoReviewers(ctx *context.Context, repo *repo_model.Repository, is
 | 
				
			|||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		teamReviewers, err = repo_service.GetReviewerTeams(repo)
 | 
							teamReviewers, err = repo_service.GetReviewerTeams(ctx, repo)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			ctx.ServerError("GetReviewerTeams", err)
 | 
								ctx.ServerError("GetReviewerTeams", err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1399,7 +1399,7 @@ func CleanUpPullRequest(ctx *context.Context) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func deleteBranch(ctx *context.Context, pr *issues_model.PullRequest, gitRepo *git.Repository) {
 | 
					func deleteBranch(ctx *context.Context, pr *issues_model.PullRequest, gitRepo *git.Repository) {
 | 
				
			||||||
	fullBranchName := pr.HeadRepo.FullName() + ":" + pr.HeadBranch
 | 
						fullBranchName := pr.HeadRepo.FullName() + ":" + pr.HeadBranch
 | 
				
			||||||
	if err := repo_service.DeleteBranch(ctx.Doer, pr.HeadRepo, gitRepo, pr.HeadBranch); err != nil {
 | 
						if err := repo_service.DeleteBranch(ctx, ctx.Doer, pr.HeadRepo, gitRepo, pr.HeadBranch); err != nil {
 | 
				
			||||||
		switch {
 | 
							switch {
 | 
				
			||||||
		case git.IsErrBranchNotExist(err):
 | 
							case git.IsErrBranchNotExist(err):
 | 
				
			||||||
			ctx.Flash.Error(ctx.Tr("repo.branch.deletion_failed", fullBranchName))
 | 
								ctx.Flash.Error(ctx.Tr("repo.branch.deletion_failed", fullBranchName))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -248,14 +248,14 @@ func CreatePost(ctx *context.Context) {
 | 
				
			|||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		repo, err = repo_service.GenerateRepository(ctx.Doer, ctxUser, templateRepo, opts)
 | 
							repo, err = repo_service.GenerateRepository(ctx, ctx.Doer, ctxUser, templateRepo, opts)
 | 
				
			||||||
		if err == nil {
 | 
							if err == nil {
 | 
				
			||||||
			log.Trace("Repository generated [%d]: %s/%s", repo.ID, ctxUser.Name, repo.Name)
 | 
								log.Trace("Repository generated [%d]: %s/%s", repo.ID, ctxUser.Name, repo.Name)
 | 
				
			||||||
			ctx.Redirect(repo.Link())
 | 
								ctx.Redirect(repo.Link())
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		repo, err = repo_service.CreateRepository(ctx.Doer, ctxUser, repo_module.CreateRepoOptions{
 | 
							repo, err = repo_service.CreateRepository(ctx, ctx.Doer, ctxUser, repo_module.CreateRepoOptions{
 | 
				
			||||||
			Name:          form.RepoName,
 | 
								Name:          form.RepoName,
 | 
				
			||||||
			Description:   form.Description,
 | 
								Description:   form.Description,
 | 
				
			||||||
			Gitignores:    form.Gitignores,
 | 
								Gitignores:    form.Gitignores,
 | 
				
			||||||
@@ -302,7 +302,7 @@ func Action(ctx *context.Context) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		ctx.Repo.Repository.Description = ctx.FormString("desc")
 | 
							ctx.Repo.Repository.Description = ctx.FormString("desc")
 | 
				
			||||||
		ctx.Repo.Repository.Website = ctx.FormString("site")
 | 
							ctx.Repo.Repository.Website = ctx.FormString("site")
 | 
				
			||||||
		err = repo_service.UpdateRepository(ctx.Repo.Repository, false)
 | 
							err = repo_service.UpdateRepository(ctx, ctx.Repo.Repository, false)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -134,7 +134,7 @@ func SettingsPost(ctx *context.Context) {
 | 
				
			|||||||
				ctx.Repo.GitRepo.Close()
 | 
									ctx.Repo.GitRepo.Close()
 | 
				
			||||||
				ctx.Repo.GitRepo = nil
 | 
									ctx.Repo.GitRepo = nil
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if err := repo_service.ChangeRepositoryName(ctx.Doer, repo, newRepoName); err != nil {
 | 
								if err := repo_service.ChangeRepositoryName(ctx, ctx.Doer, repo, newRepoName); err != nil {
 | 
				
			||||||
				ctx.Data["Err_RepoName"] = true
 | 
									ctx.Data["Err_RepoName"] = true
 | 
				
			||||||
				switch {
 | 
									switch {
 | 
				
			||||||
				case repo_model.IsErrRepoAlreadyExist(err):
 | 
									case repo_model.IsErrRepoAlreadyExist(err):
 | 
				
			||||||
@@ -183,7 +183,7 @@ func SettingsPost(ctx *context.Context) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		repo.IsPrivate = form.Private
 | 
							repo.IsPrivate = form.Private
 | 
				
			||||||
		if err := repo_service.UpdateRepository(repo, visibilityChanged); err != nil {
 | 
							if err := repo_service.UpdateRepository(ctx, repo, visibilityChanged); err != nil {
 | 
				
			||||||
			ctx.ServerError("UpdateRepository", err)
 | 
								ctx.ServerError("UpdateRepository", err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -541,7 +541,7 @@ func SettingsPost(ctx *context.Context) {
 | 
				
			|||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if repoChanged {
 | 
							if repoChanged {
 | 
				
			||||||
			if err := repo_service.UpdateRepository(repo, false); err != nil {
 | 
								if err := repo_service.UpdateRepository(ctx, repo, false); err != nil {
 | 
				
			||||||
				ctx.ServerError("UpdateRepository", err)
 | 
									ctx.ServerError("UpdateRepository", err)
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -560,7 +560,7 @@ func SettingsPost(ctx *context.Context) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if changed {
 | 
							if changed {
 | 
				
			||||||
			if err := repo_service.UpdateRepository(repo, false); err != nil {
 | 
								if err := repo_service.UpdateRepository(ctx, repo, false); err != nil {
 | 
				
			||||||
				ctx.ServerError("UpdateRepository", err)
 | 
									ctx.ServerError("UpdateRepository", err)
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -580,7 +580,7 @@ func SettingsPost(ctx *context.Context) {
 | 
				
			|||||||
			repo.IsFsckEnabled = form.EnableHealthCheck
 | 
								repo.IsFsckEnabled = form.EnableHealthCheck
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if err := repo_service.UpdateRepository(repo, false); err != nil {
 | 
							if err := repo_service.UpdateRepository(ctx, repo, false); err != nil {
 | 
				
			||||||
			ctx.ServerError("UpdateRepository", err)
 | 
								ctx.ServerError("UpdateRepository", err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -672,7 +672,7 @@ func SettingsPost(ctx *context.Context) {
 | 
				
			|||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if err := repo_service.ConvertForkToNormalRepository(repo); err != nil {
 | 
							if err := repo_service.ConvertForkToNormalRepository(ctx, repo); err != nil {
 | 
				
			||||||
			log.Error("Unable to convert repository %-v from fork. Error: %v", repo, err)
 | 
								log.Error("Unable to convert repository %-v from fork. Error: %v", repo, err)
 | 
				
			||||||
			ctx.ServerError("Convert Fork", err)
 | 
								ctx.ServerError("Convert Fork", err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
@@ -1244,7 +1244,7 @@ func UpdateAvatarSetting(ctx *context.Context, form forms.AvatarForm) error {
 | 
				
			|||||||
	if !(st.IsImage() && !st.IsSvgImage()) {
 | 
						if !(st.IsImage() && !st.IsSvgImage()) {
 | 
				
			||||||
		return errors.New(ctx.Tr("settings.uploaded_avatar_not_a_image"))
 | 
							return errors.New(ctx.Tr("settings.uploaded_avatar_not_a_image"))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if err = repo_service.UploadAvatar(ctxRepo, data); err != nil {
 | 
						if err = repo_service.UploadAvatar(ctx, ctxRepo, data); err != nil {
 | 
				
			||||||
		return fmt.Errorf("UploadAvatar: %w", err)
 | 
							return fmt.Errorf("UploadAvatar: %w", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
@@ -1264,7 +1264,7 @@ func SettingsAvatar(ctx *context.Context) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// SettingsDeleteAvatar delete repository avatar
 | 
					// SettingsDeleteAvatar delete repository avatar
 | 
				
			||||||
func SettingsDeleteAvatar(ctx *context.Context) {
 | 
					func SettingsDeleteAvatar(ctx *context.Context) {
 | 
				
			||||||
	if err := repo_service.DeleteAvatar(ctx.Repo.Repository); err != nil {
 | 
						if err := repo_service.DeleteAvatar(ctx, ctx.Repo.Repository); err != nil {
 | 
				
			||||||
		ctx.Flash.Error(fmt.Sprintf("DeleteAvatar: %v", err))
 | 
							ctx.Flash.Error(fmt.Sprintf("DeleteAvatar: %v", err))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	ctx.Redirect(ctx.Repo.RepoLink + "/settings")
 | 
						ctx.Redirect(ctx.Repo.RepoLink + "/settings")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -356,7 +356,7 @@ func RenameBranchPost(ctx *context.Context) {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	msg, err := repository.RenameBranch(ctx.Repo.Repository, ctx.Doer, ctx.Repo.GitRepo, form.From, form.To)
 | 
						msg, err := repository.RenameBranch(ctx, ctx.Repo.Repository, ctx.Doer, ctx.Repo.GitRepo, form.From, form.To)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		ctx.ServerError("RenameBranch", err)
 | 
							ctx.ServerError("RenameBranch", err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,7 +45,7 @@ func AdoptOrDeleteRepository(ctx *context.Context) {
 | 
				
			|||||||
	if has || !isDir {
 | 
						if has || !isDir {
 | 
				
			||||||
		// Fallthrough to failure mode
 | 
							// Fallthrough to failure mode
 | 
				
			||||||
	} else if action == "adopt" && allowAdopt {
 | 
						} else if action == "adopt" && allowAdopt {
 | 
				
			||||||
		if _, err := repo_service.AdoptRepository(ctxUser, ctxUser, repo_module.CreateRepoOptions{
 | 
							if _, err := repo_service.AdoptRepository(ctx, ctxUser, ctxUser, repo_module.CreateRepoOptions{
 | 
				
			||||||
			Name:      dir,
 | 
								Name:      dir,
 | 
				
			||||||
			IsPrivate: true,
 | 
								IsPrivate: true,
 | 
				
			||||||
		}); err != nil {
 | 
							}); err != nil {
 | 
				
			||||||
@@ -54,7 +54,7 @@ func AdoptOrDeleteRepository(ctx *context.Context) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		ctx.Flash.Success(ctx.Tr("repo.adopt_preexisting_success", dir))
 | 
							ctx.Flash.Success(ctx.Tr("repo.adopt_preexisting_success", dir))
 | 
				
			||||||
	} else if action == "delete" && allowDelete {
 | 
						} else if action == "delete" && allowDelete {
 | 
				
			||||||
		if err := repo_service.DeleteUnadoptedRepository(ctxUser, ctxUser, dir); err != nil {
 | 
							if err := repo_service.DeleteUnadoptedRepository(ctx, ctxUser, ctxUser, dir); err != nil {
 | 
				
			||||||
			ctx.ServerError("repository.AdoptRepository", err)
 | 
								ctx.ServerError("repository.AdoptRepository", err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,7 +26,7 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// AdoptRepository adopts pre-existing repository files for the user/organization.
 | 
					// AdoptRepository adopts pre-existing repository files for the user/organization.
 | 
				
			||||||
func AdoptRepository(doer, u *user_model.User, opts repo_module.CreateRepoOptions) (*repo_model.Repository, error) {
 | 
					func AdoptRepository(ctx context.Context, doer, u *user_model.User, opts repo_module.CreateRepoOptions) (*repo_model.Repository, error) {
 | 
				
			||||||
	if !doer.IsAdmin && !u.CanCreateRepo() {
 | 
						if !doer.IsAdmin && !u.CanCreateRepo() {
 | 
				
			||||||
		return nil, repo_model.ErrReachLimitOfRepo{
 | 
							return nil, repo_model.ErrReachLimitOfRepo{
 | 
				
			||||||
			Limit: u.MaxRepoCreation,
 | 
								Limit: u.MaxRepoCreation,
 | 
				
			||||||
@@ -53,7 +53,7 @@ func AdoptRepository(doer, u *user_model.User, opts repo_module.CreateRepoOption
 | 
				
			|||||||
		IsEmpty:                         !opts.AutoInit,
 | 
							IsEmpty:                         !opts.AutoInit,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := db.WithTx(db.DefaultContext, func(ctx context.Context) error {
 | 
						if err := db.WithTx(ctx, func(ctx context.Context) error {
 | 
				
			||||||
		repoPath := repo_model.RepoPath(u.Name, repo.Name)
 | 
							repoPath := repo_model.RepoPath(u.Name, repo.Name)
 | 
				
			||||||
		isExist, err := util.IsExist(repoPath)
 | 
							isExist, err := util.IsExist(repoPath)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
@@ -95,7 +95,7 @@ func AdoptRepository(doer, u *user_model.User, opts repo_module.CreateRepoOption
 | 
				
			|||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	notification.NotifyCreateRepository(db.DefaultContext, doer, u, repo)
 | 
						notification.NotifyCreateRepository(ctx, doer, u, repo)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return repo, nil
 | 
						return repo, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -188,7 +188,7 @@ func adoptRepository(ctx context.Context, repoPath string, u *user_model.User, r
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DeleteUnadoptedRepository deletes unadopted repository files from the filesystem
 | 
					// DeleteUnadoptedRepository deletes unadopted repository files from the filesystem
 | 
				
			||||||
func DeleteUnadoptedRepository(doer, u *user_model.User, repoName string) error {
 | 
					func DeleteUnadoptedRepository(ctx context.Context, doer, u *user_model.User, repoName string) error {
 | 
				
			||||||
	if err := repo_model.IsUsableRepoName(repoName); err != nil {
 | 
						if err := repo_model.IsUsableRepoName(repoName); err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -206,7 +206,7 @@ func DeleteUnadoptedRepository(doer, u *user_model.User, repoName string) error
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if exist, err := repo_model.IsRepositoryExist(db.DefaultContext, u, repoName); err != nil {
 | 
						if exist, err := repo_model.IsRepositoryExist(ctx, u, repoName); err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	} else if exist {
 | 
						} else if exist {
 | 
				
			||||||
		return repo_model.ErrRepoAlreadyExist{
 | 
							return repo_model.ErrRepoAlreadyExist{
 | 
				
			||||||
@@ -232,11 +232,11 @@ func (unadopted *unadoptedRepositories) add(repository string) {
 | 
				
			|||||||
	unadopted.index++
 | 
						unadopted.index++
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func checkUnadoptedRepositories(userName string, repoNamesToCheck []string, unadopted *unadoptedRepositories) error {
 | 
					func checkUnadoptedRepositories(ctx context.Context, userName string, repoNamesToCheck []string, unadopted *unadoptedRepositories) error {
 | 
				
			||||||
	if len(repoNamesToCheck) == 0 {
 | 
						if len(repoNamesToCheck) == 0 {
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	ctxUser, err := user_model.GetUserByName(db.DefaultContext, userName)
 | 
						ctxUser, err := user_model.GetUserByName(ctx, userName)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		if user_model.IsErrUserNotExist(err) {
 | 
							if user_model.IsErrUserNotExist(err) {
 | 
				
			||||||
			log.Debug("Missing user: %s", userName)
 | 
								log.Debug("Missing user: %s", userName)
 | 
				
			||||||
@@ -271,7 +271,7 @@ func checkUnadoptedRepositories(userName string, repoNamesToCheck []string, unad
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ListUnadoptedRepositories lists all the unadopted repositories that match the provided query
 | 
					// ListUnadoptedRepositories lists all the unadopted repositories that match the provided query
 | 
				
			||||||
func ListUnadoptedRepositories(query string, opts *db.ListOptions) ([]string, int, error) {
 | 
					func ListUnadoptedRepositories(ctx context.Context, query string, opts *db.ListOptions) ([]string, int, error) {
 | 
				
			||||||
	globUser, _ := glob.Compile("*")
 | 
						globUser, _ := glob.Compile("*")
 | 
				
			||||||
	globRepo, _ := glob.Compile("*")
 | 
						globRepo, _ := glob.Compile("*")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -315,7 +315,7 @@ func ListUnadoptedRepositories(query string, opts *db.ListOptions) ([]string, in
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		if !strings.ContainsRune(path[len(root)+1:], filepath.Separator) {
 | 
							if !strings.ContainsRune(path[len(root)+1:], filepath.Separator) {
 | 
				
			||||||
			// Got a new user
 | 
								// Got a new user
 | 
				
			||||||
			if err = checkUnadoptedRepositories(userName, repoNamesToCheck, unadopted); err != nil {
 | 
								if err = checkUnadoptedRepositories(ctx, userName, repoNamesToCheck, unadopted); err != nil {
 | 
				
			||||||
				return err
 | 
									return err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			repoNamesToCheck = repoNamesToCheck[:0]
 | 
								repoNamesToCheck = repoNamesToCheck[:0]
 | 
				
			||||||
@@ -338,7 +338,7 @@ func ListUnadoptedRepositories(query string, opts *db.ListOptions) ([]string, in
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		repoNamesToCheck = append(repoNamesToCheck, name)
 | 
							repoNamesToCheck = append(repoNamesToCheck, name)
 | 
				
			||||||
		if len(repoNamesToCheck) >= setting.Database.IterateBufferSize {
 | 
							if len(repoNamesToCheck) >= setting.Database.IterateBufferSize {
 | 
				
			||||||
			if err = checkUnadoptedRepositories(userName, repoNamesToCheck, unadopted); err != nil {
 | 
								if err = checkUnadoptedRepositories(ctx, userName, repoNamesToCheck, unadopted); err != nil {
 | 
				
			||||||
				return err
 | 
									return err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			repoNamesToCheck = repoNamesToCheck[:0]
 | 
								repoNamesToCheck = repoNamesToCheck[:0]
 | 
				
			||||||
@@ -349,7 +349,7 @@ func ListUnadoptedRepositories(query string, opts *db.ListOptions) ([]string, in
 | 
				
			|||||||
		return nil, 0, err
 | 
							return nil, 0, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := checkUnadoptedRepositories(userName, repoNamesToCheck, unadopted); err != nil {
 | 
						if err := checkUnadoptedRepositories(ctx, userName, repoNamesToCheck, unadopted); err != nil {
 | 
				
			||||||
		return nil, 0, err
 | 
							return nil, 0, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,7 +39,7 @@ func TestCheckUnadoptedRepositories(t *testing.T) {
 | 
				
			|||||||
	// Non existent user
 | 
						// Non existent user
 | 
				
			||||||
	//
 | 
						//
 | 
				
			||||||
	unadopted := &unadoptedRepositories{start: 0, end: 100}
 | 
						unadopted := &unadoptedRepositories{start: 0, end: 100}
 | 
				
			||||||
	err := checkUnadoptedRepositories("notauser", []string{"repo"}, unadopted)
 | 
						err := checkUnadoptedRepositories(db.DefaultContext, "notauser", []string{"repo"}, unadopted)
 | 
				
			||||||
	assert.NoError(t, err)
 | 
						assert.NoError(t, err)
 | 
				
			||||||
	assert.Equal(t, 0, len(unadopted.repositories))
 | 
						assert.Equal(t, 0, len(unadopted.repositories))
 | 
				
			||||||
	//
 | 
						//
 | 
				
			||||||
@@ -50,14 +50,14 @@ func TestCheckUnadoptedRepositories(t *testing.T) {
 | 
				
			|||||||
	repoName := "repo2"
 | 
						repoName := "repo2"
 | 
				
			||||||
	unadoptedRepoName := "unadopted"
 | 
						unadoptedRepoName := "unadopted"
 | 
				
			||||||
	unadopted = &unadoptedRepositories{start: 0, end: 100}
 | 
						unadopted = &unadoptedRepositories{start: 0, end: 100}
 | 
				
			||||||
	err = checkUnadoptedRepositories(userName, []string{repoName, unadoptedRepoName}, unadopted)
 | 
						err = checkUnadoptedRepositories(db.DefaultContext, userName, []string{repoName, unadoptedRepoName}, unadopted)
 | 
				
			||||||
	assert.NoError(t, err)
 | 
						assert.NoError(t, err)
 | 
				
			||||||
	assert.Equal(t, []string{path.Join(userName, unadoptedRepoName)}, unadopted.repositories)
 | 
						assert.Equal(t, []string{path.Join(userName, unadoptedRepoName)}, unadopted.repositories)
 | 
				
			||||||
	//
 | 
						//
 | 
				
			||||||
	// Existing (adopted) repository is not returned
 | 
						// Existing (adopted) repository is not returned
 | 
				
			||||||
	//
 | 
						//
 | 
				
			||||||
	unadopted = &unadoptedRepositories{start: 0, end: 100}
 | 
						unadopted = &unadoptedRepositories{start: 0, end: 100}
 | 
				
			||||||
	err = checkUnadoptedRepositories(userName, []string{repoName}, unadopted)
 | 
						err = checkUnadoptedRepositories(db.DefaultContext, userName, []string{repoName}, unadopted)
 | 
				
			||||||
	assert.NoError(t, err)
 | 
						assert.NoError(t, err)
 | 
				
			||||||
	assert.Equal(t, 0, len(unadopted.repositories))
 | 
						assert.Equal(t, 0, len(unadopted.repositories))
 | 
				
			||||||
	assert.Equal(t, 0, unadopted.index)
 | 
						assert.Equal(t, 0, unadopted.index)
 | 
				
			||||||
@@ -72,13 +72,13 @@ func TestListUnadoptedRepositories_ListOptions(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	opts := db.ListOptions{Page: 1, PageSize: 1}
 | 
						opts := db.ListOptions{Page: 1, PageSize: 1}
 | 
				
			||||||
	repoNames, count, err := ListUnadoptedRepositories("", &opts)
 | 
						repoNames, count, err := ListUnadoptedRepositories(db.DefaultContext, "", &opts)
 | 
				
			||||||
	assert.NoError(t, err)
 | 
						assert.NoError(t, err)
 | 
				
			||||||
	assert.Equal(t, 2, count)
 | 
						assert.Equal(t, 2, count)
 | 
				
			||||||
	assert.Equal(t, unadoptedList[0], repoNames[0])
 | 
						assert.Equal(t, unadoptedList[0], repoNames[0])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	opts = db.ListOptions{Page: 2, PageSize: 1}
 | 
						opts = db.ListOptions{Page: 2, PageSize: 1}
 | 
				
			||||||
	repoNames, count, err = ListUnadoptedRepositories("", &opts)
 | 
						repoNames, count, err = ListUnadoptedRepositories(db.DefaultContext, "", &opts)
 | 
				
			||||||
	assert.NoError(t, err)
 | 
						assert.NoError(t, err)
 | 
				
			||||||
	assert.Equal(t, 2, count)
 | 
						assert.Equal(t, 2, count)
 | 
				
			||||||
	assert.Equal(t, unadoptedList[1], repoNames[0])
 | 
						assert.Equal(t, unadoptedList[1], repoNames[0])
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,7 +20,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// UploadAvatar saves custom avatar for repository.
 | 
					// UploadAvatar saves custom avatar for repository.
 | 
				
			||||||
// FIXME: split uploads to different subdirs in case we have massive number of repos.
 | 
					// FIXME: split uploads to different subdirs in case we have massive number of repos.
 | 
				
			||||||
func UploadAvatar(repo *repo_model.Repository, data []byte) error {
 | 
					func UploadAvatar(ctx context.Context, repo *repo_model.Repository, data []byte) error {
 | 
				
			||||||
	m, err := avatar.Prepare(data)
 | 
						m, err := avatar.Prepare(data)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
@@ -31,7 +31,7 @@ func UploadAvatar(repo *repo_model.Repository, data []byte) error {
 | 
				
			|||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx, committer, err := db.TxContext(db.DefaultContext)
 | 
						ctx, committer, err := db.TxContext(ctx)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -65,7 +65,7 @@ func UploadAvatar(repo *repo_model.Repository, data []byte) error {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DeleteAvatar deletes the repos's custom avatar.
 | 
					// DeleteAvatar deletes the repos's custom avatar.
 | 
				
			||||||
func DeleteAvatar(repo *repo_model.Repository) error {
 | 
					func DeleteAvatar(ctx context.Context, repo *repo_model.Repository) error {
 | 
				
			||||||
	// Avatar not exists
 | 
						// Avatar not exists
 | 
				
			||||||
	if len(repo.Avatar) == 0 {
 | 
						if len(repo.Avatar) == 0 {
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
@@ -74,7 +74,7 @@ func DeleteAvatar(repo *repo_model.Repository) error {
 | 
				
			|||||||
	avatarPath := repo.CustomAvatarRelativePath()
 | 
						avatarPath := repo.CustomAvatarRelativePath()
 | 
				
			||||||
	log.Trace("DeleteAvatar[%d]: %s", repo.ID, avatarPath)
 | 
						log.Trace("DeleteAvatar[%d]: %s", repo.ID, avatarPath)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx, committer, err := db.TxContext(db.DefaultContext)
 | 
						ctx, committer, err := db.TxContext(ctx)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -102,7 +102,7 @@ func RemoveRandomAvatars(ctx context.Context) error {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		stringifiedID := strconv.FormatInt(repository.ID, 10)
 | 
							stringifiedID := strconv.FormatInt(repository.ID, 10)
 | 
				
			||||||
		if repository.Avatar == stringifiedID {
 | 
							if repository.Avatar == stringifiedID {
 | 
				
			||||||
			return DeleteAvatar(repository)
 | 
								return DeleteAvatar(ctx, repository)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,7 @@ import (
 | 
				
			|||||||
	"image/png"
 | 
						"image/png"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/models/db"
 | 
				
			||||||
	repo_model "code.gitea.io/gitea/models/repo"
 | 
						repo_model "code.gitea.io/gitea/models/repo"
 | 
				
			||||||
	"code.gitea.io/gitea/models/unittest"
 | 
						"code.gitea.io/gitea/models/unittest"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/avatar"
 | 
						"code.gitea.io/gitea/modules/avatar"
 | 
				
			||||||
@@ -25,7 +26,7 @@ func TestUploadAvatar(t *testing.T) {
 | 
				
			|||||||
	assert.NoError(t, unittest.PrepareTestDatabase())
 | 
						assert.NoError(t, unittest.PrepareTestDatabase())
 | 
				
			||||||
	repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 10})
 | 
						repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 10})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err := UploadAvatar(repo, buff.Bytes())
 | 
						err := UploadAvatar(db.DefaultContext, repo, buff.Bytes())
 | 
				
			||||||
	assert.NoError(t, err)
 | 
						assert.NoError(t, err)
 | 
				
			||||||
	assert.Equal(t, avatar.HashAvatar(10, buff.Bytes()), repo.Avatar)
 | 
						assert.Equal(t, avatar.HashAvatar(10, buff.Bytes()), repo.Avatar)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -39,7 +40,7 @@ func TestUploadBigAvatar(t *testing.T) {
 | 
				
			|||||||
	assert.NoError(t, unittest.PrepareTestDatabase())
 | 
						assert.NoError(t, unittest.PrepareTestDatabase())
 | 
				
			||||||
	repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 10})
 | 
						repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 10})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err := UploadAvatar(repo, buff.Bytes())
 | 
						err := UploadAvatar(db.DefaultContext, repo, buff.Bytes())
 | 
				
			||||||
	assert.Error(t, err)
 | 
						assert.Error(t, err)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -52,10 +53,10 @@ func TestDeleteAvatar(t *testing.T) {
 | 
				
			|||||||
	assert.NoError(t, unittest.PrepareTestDatabase())
 | 
						assert.NoError(t, unittest.PrepareTestDatabase())
 | 
				
			||||||
	repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 10})
 | 
						repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 10})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err := UploadAvatar(repo, buff.Bytes())
 | 
						err := UploadAvatar(db.DefaultContext, repo, buff.Bytes())
 | 
				
			||||||
	assert.NoError(t, err)
 | 
						assert.NoError(t, err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = DeleteAvatar(repo)
 | 
						err = DeleteAvatar(db.DefaultContext, repo)
 | 
				
			||||||
	assert.NoError(t, err)
 | 
						assert.NoError(t, err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	assert.Equal(t, "", repo.Avatar)
 | 
						assert.Equal(t, "", repo.Avatar)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,6 @@ import (
 | 
				
			|||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/models/db"
 | 
					 | 
				
			||||||
	git_model "code.gitea.io/gitea/models/git"
 | 
						git_model "code.gitea.io/gitea/models/git"
 | 
				
			||||||
	repo_model "code.gitea.io/gitea/models/repo"
 | 
						repo_model "code.gitea.io/gitea/models/repo"
 | 
				
			||||||
	user_model "code.gitea.io/gitea/models/user"
 | 
						user_model "code.gitea.io/gitea/models/user"
 | 
				
			||||||
@@ -106,7 +105,7 @@ func CreateNewBranchFromCommit(ctx context.Context, doer *user_model.User, repo
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RenameBranch rename a branch
 | 
					// RenameBranch rename a branch
 | 
				
			||||||
func RenameBranch(repo *repo_model.Repository, doer *user_model.User, gitRepo *git.Repository, from, to string) (string, error) {
 | 
					func RenameBranch(ctx context.Context, repo *repo_model.Repository, doer *user_model.User, gitRepo *git.Repository, from, to string) (string, error) {
 | 
				
			||||||
	if from == to {
 | 
						if from == to {
 | 
				
			||||||
		return "target_exist", nil
 | 
							return "target_exist", nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -119,7 +118,7 @@ func RenameBranch(repo *repo_model.Repository, doer *user_model.User, gitRepo *g
 | 
				
			|||||||
		return "from_not_exist", nil
 | 
							return "from_not_exist", nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := git_model.RenameBranch(db.DefaultContext, repo, from, to, func(isDefault bool) error {
 | 
						if err := git_model.RenameBranch(ctx, repo, from, to, func(isDefault bool) error {
 | 
				
			||||||
		err2 := gitRepo.RenameBranch(from, to)
 | 
							err2 := gitRepo.RenameBranch(from, to)
 | 
				
			||||||
		if err2 != nil {
 | 
							if err2 != nil {
 | 
				
			||||||
			return err2
 | 
								return err2
 | 
				
			||||||
@@ -141,8 +140,8 @@ func RenameBranch(repo *repo_model.Repository, doer *user_model.User, gitRepo *g
 | 
				
			|||||||
		return "", err
 | 
							return "", err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	notification.NotifyDeleteRef(db.DefaultContext, doer, repo, "branch", git.BranchPrefix+from)
 | 
						notification.NotifyDeleteRef(ctx, doer, repo, "branch", git.BranchPrefix+from)
 | 
				
			||||||
	notification.NotifyCreateRef(db.DefaultContext, doer, repo, "branch", git.BranchPrefix+to, refID)
 | 
						notification.NotifyCreateRef(ctx, doer, repo, "branch", git.BranchPrefix+to, refID)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return "", nil
 | 
						return "", nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -153,12 +152,12 @@ var (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DeleteBranch delete branch
 | 
					// DeleteBranch delete branch
 | 
				
			||||||
func DeleteBranch(doer *user_model.User, repo *repo_model.Repository, gitRepo *git.Repository, branchName string) error {
 | 
					func DeleteBranch(ctx context.Context, doer *user_model.User, repo *repo_model.Repository, gitRepo *git.Repository, branchName string) error {
 | 
				
			||||||
	if branchName == repo.DefaultBranch {
 | 
						if branchName == repo.DefaultBranch {
 | 
				
			||||||
		return ErrBranchIsDefault
 | 
							return ErrBranchIsDefault
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	isProtected, err := git_model.IsBranchProtected(db.DefaultContext, repo.ID, branchName)
 | 
						isProtected, err := git_model.IsBranchProtected(ctx, repo.ID, branchName)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -195,7 +194,7 @@ func DeleteBranch(doer *user_model.User, repo *repo_model.Repository, gitRepo *g
 | 
				
			|||||||
		log.Error("Update: %v", err)
 | 
							log.Error("Update: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := git_model.AddDeletedBranch(db.DefaultContext, repo.ID, branchName, commit.ID.String(), doer.ID); err != nil {
 | 
						if err := git_model.AddDeletedBranch(ctx, repo.ID, branchName, commit.ID.String(), doer.ID); err != nil {
 | 
				
			||||||
		log.Warn("AddDeletedBranch: %v", err)
 | 
							log.Warn("AddDeletedBranch: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -189,8 +189,8 @@ func ForkRepository(ctx context.Context, doer, owner *user_model.User, opts Fork
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ConvertForkToNormalRepository convert the provided repo from a forked repo to normal repo
 | 
					// ConvertForkToNormalRepository convert the provided repo from a forked repo to normal repo
 | 
				
			||||||
func ConvertForkToNormalRepository(repo *repo_model.Repository) error {
 | 
					func ConvertForkToNormalRepository(ctx context.Context, repo *repo_model.Repository) error {
 | 
				
			||||||
	err := db.WithTx(db.DefaultContext, func(ctx context.Context) error {
 | 
						err := db.WithTx(ctx, func(ctx context.Context) error {
 | 
				
			||||||
		repo, err := repo_model.GetRepositoryByID(ctx, repo.ID)
 | 
							repo, err := repo_model.GetRepositoryByID(ctx, repo.ID)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -80,6 +80,7 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	ctx, _, finished := process.GetManager().AddContext(graceful.GetManager().HammerContext(), fmt.Sprintf("PushUpdates: %s/%s", optsList[0].RepoUserName, optsList[0].RepoName))
 | 
						ctx, _, finished := process.GetManager().AddContext(graceful.GetManager().HammerContext(), fmt.Sprintf("PushUpdates: %s/%s", optsList[0].RepoUserName, optsList[0].RepoName))
 | 
				
			||||||
	defer finished()
 | 
						defer finished()
 | 
				
			||||||
 | 
						ctx = cache.WithCacheContext(ctx)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	repo, err := repo_model.GetRepositoryByOwnerAndName(ctx, optsList[0].RepoUserName, optsList[0].RepoName)
 | 
						repo, err := repo_model.GetRepositoryByOwnerAndName(ctx, optsList[0].RepoUserName, optsList[0].RepoName)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@@ -122,7 +123,7 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
 | 
				
			|||||||
			tagName := opts.TagName()
 | 
								tagName := opts.TagName()
 | 
				
			||||||
			if opts.IsDelRef() {
 | 
								if opts.IsDelRef() {
 | 
				
			||||||
				notification.NotifyPushCommits(
 | 
									notification.NotifyPushCommits(
 | 
				
			||||||
					db.DefaultContext, pusher, repo,
 | 
										ctx, pusher, repo,
 | 
				
			||||||
					&repo_module.PushUpdateOptions{
 | 
										&repo_module.PushUpdateOptions{
 | 
				
			||||||
						RefFullName: git.TagPrefix + tagName,
 | 
											RefFullName: git.TagPrefix + tagName,
 | 
				
			||||||
						OldCommitID: opts.OldCommitID,
 | 
											OldCommitID: opts.OldCommitID,
 | 
				
			||||||
@@ -130,7 +131,7 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
 | 
				
			|||||||
					}, repo_module.NewPushCommits())
 | 
										}, repo_module.NewPushCommits())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				delTags = append(delTags, tagName)
 | 
									delTags = append(delTags, tagName)
 | 
				
			||||||
				notification.NotifyDeleteRef(db.DefaultContext, pusher, repo, "tag", opts.RefFullName)
 | 
									notification.NotifyDeleteRef(ctx, pusher, repo, "tag", opts.RefFullName)
 | 
				
			||||||
			} else { // is new tag
 | 
								} else { // is new tag
 | 
				
			||||||
				newCommit, err := gitRepo.GetCommit(opts.NewCommitID)
 | 
									newCommit, err := gitRepo.GetCommit(opts.NewCommitID)
 | 
				
			||||||
				if err != nil {
 | 
									if err != nil {
 | 
				
			||||||
@@ -142,7 +143,7 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
 | 
				
			|||||||
				commits.CompareURL = repo.ComposeCompareURL(git.EmptySHA, opts.NewCommitID)
 | 
									commits.CompareURL = repo.ComposeCompareURL(git.EmptySHA, opts.NewCommitID)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				notification.NotifyPushCommits(
 | 
									notification.NotifyPushCommits(
 | 
				
			||||||
					db.DefaultContext, pusher, repo,
 | 
										ctx, pusher, repo,
 | 
				
			||||||
					&repo_module.PushUpdateOptions{
 | 
										&repo_module.PushUpdateOptions{
 | 
				
			||||||
						RefFullName: git.TagPrefix + tagName,
 | 
											RefFullName: git.TagPrefix + tagName,
 | 
				
			||||||
						OldCommitID: git.EmptySHA,
 | 
											OldCommitID: git.EmptySHA,
 | 
				
			||||||
@@ -150,7 +151,7 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
 | 
				
			|||||||
					}, commits)
 | 
										}, commits)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				addTags = append(addTags, tagName)
 | 
									addTags = append(addTags, tagName)
 | 
				
			||||||
				notification.NotifyCreateRef(db.DefaultContext, pusher, repo, "tag", opts.RefFullName, opts.NewCommitID)
 | 
									notification.NotifyCreateRef(ctx, pusher, repo, "tag", opts.RefFullName, opts.NewCommitID)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		} else if opts.IsBranch() { // If is branch reference
 | 
							} else if opts.IsBranch() { // If is branch reference
 | 
				
			||||||
			if pusher == nil || pusher.ID != opts.PusherID {
 | 
								if pusher == nil || pusher.ID != opts.PusherID {
 | 
				
			||||||
@@ -190,7 +191,7 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
 | 
				
			|||||||
							}
 | 
												}
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
						// Update the is empty and default_branch columns
 | 
											// Update the is empty and default_branch columns
 | 
				
			||||||
						if err := repo_model.UpdateRepositoryCols(db.DefaultContext, repo, "default_branch", "is_empty"); err != nil {
 | 
											if err := repo_model.UpdateRepositoryCols(ctx, repo, "default_branch", "is_empty"); err != nil {
 | 
				
			||||||
							return fmt.Errorf("UpdateRepositoryCols: %w", err)
 | 
												return fmt.Errorf("UpdateRepositoryCols: %w", err)
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
@@ -199,7 +200,7 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
 | 
				
			|||||||
					if err != nil {
 | 
										if err != nil {
 | 
				
			||||||
						return fmt.Errorf("newCommit.CommitsBeforeLimit: %w", err)
 | 
											return fmt.Errorf("newCommit.CommitsBeforeLimit: %w", err)
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					notification.NotifyCreateRef(db.DefaultContext, pusher, repo, "branch", opts.RefFullName, opts.NewCommitID)
 | 
										notification.NotifyCreateRef(ctx, pusher, repo, "branch", opts.RefFullName, opts.NewCommitID)
 | 
				
			||||||
				} else {
 | 
									} else {
 | 
				
			||||||
					l, err = newCommit.CommitsBeforeUntil(opts.OldCommitID)
 | 
										l, err = newCommit.CommitsBeforeUntil(opts.OldCommitID)
 | 
				
			||||||
					if err != nil {
 | 
										if err != nil {
 | 
				
			||||||
@@ -259,7 +260,7 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
 | 
				
			|||||||
					commits.Commits = commits.Commits[:setting.UI.FeedMaxCommitNum]
 | 
										commits.Commits = commits.Commits[:setting.UI.FeedMaxCommitNum]
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				notification.NotifyPushCommits(db.DefaultContext, pusher, repo, opts, commits)
 | 
									notification.NotifyPushCommits(ctx, pusher, repo, opts, commits)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if err = git_model.RemoveDeletedBranchByName(ctx, repo.ID, branch); err != nil {
 | 
									if err = git_model.RemoveDeletedBranchByName(ctx, repo.ID, branch); err != nil {
 | 
				
			||||||
					log.Error("models.RemoveDeletedBranch %s/%s failed: %v", repo.ID, branch, err)
 | 
										log.Error("models.RemoveDeletedBranch %s/%s failed: %v", repo.ID, branch, err)
 | 
				
			||||||
@@ -270,7 +271,7 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
 | 
				
			|||||||
					log.Error("repo_module.CacheRef %s/%s failed: %v", repo.ID, branch, err)
 | 
										log.Error("repo_module.CacheRef %s/%s failed: %v", repo.ID, branch, err)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				notification.NotifyDeleteRef(db.DefaultContext, pusher, repo, "branch", opts.RefFullName)
 | 
									notification.NotifyDeleteRef(ctx, pusher, repo, "branch", opts.RefFullName)
 | 
				
			||||||
				if err = pull_service.CloseBranchPulls(pusher, repo.ID, branch); err != nil {
 | 
									if err = pull_service.CloseBranchPulls(pusher, repo.ID, branch); err != nil {
 | 
				
			||||||
					// close all related pulls
 | 
										// close all related pulls
 | 
				
			||||||
					log.Error("close related pull request failed: %v", err)
 | 
										log.Error("close related pull request failed: %v", err)
 | 
				
			||||||
@@ -278,14 +279,14 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// Even if user delete a branch on a repository which he didn't watch, he will be watch that.
 | 
								// Even if user delete a branch on a repository which he didn't watch, he will be watch that.
 | 
				
			||||||
			if err = repo_model.WatchIfAuto(db.DefaultContext, opts.PusherID, repo.ID, true); err != nil {
 | 
								if err = repo_model.WatchIfAuto(ctx, opts.PusherID, repo.ID, true); err != nil {
 | 
				
			||||||
				log.Warn("Fail to perform auto watch on user %v for repo %v: %v", opts.PusherID, repo.ID, err)
 | 
									log.Warn("Fail to perform auto watch on user %v for repo %v: %v", opts.PusherID, repo.ID, err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			log.Trace("Non-tag and non-branch commits pushed.")
 | 
								log.Trace("Non-tag and non-branch commits pushed.")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if err := PushUpdateAddDeleteTags(repo, gitRepo, addTags, delTags); err != nil {
 | 
						if err := PushUpdateAddDeleteTags(ctx, repo, gitRepo, addTags, delTags); err != nil {
 | 
				
			||||||
		return fmt.Errorf("PushUpdateAddDeleteTags: %w", err)
 | 
							return fmt.Errorf("PushUpdateAddDeleteTags: %w", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -298,8 +299,8 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// PushUpdateAddDeleteTags updates a number of added and delete tags
 | 
					// PushUpdateAddDeleteTags updates a number of added and delete tags
 | 
				
			||||||
func PushUpdateAddDeleteTags(repo *repo_model.Repository, gitRepo *git.Repository, addTags, delTags []string) error {
 | 
					func PushUpdateAddDeleteTags(ctx context.Context, repo *repo_model.Repository, gitRepo *git.Repository, addTags, delTags []string) error {
 | 
				
			||||||
	return db.WithTx(db.DefaultContext, func(ctx context.Context) error {
 | 
						return db.WithTx(ctx, func(ctx context.Context) error {
 | 
				
			||||||
		if err := repo_model.PushUpdateDeleteTagsContext(ctx, repo, delTags); err != nil {
 | 
							if err := repo_model.PushUpdateDeleteTagsContext(ctx, repo, delTags); err != nil {
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,14 +24,14 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CreateRepository creates a repository for the user/organization.
 | 
					// CreateRepository creates a repository for the user/organization.
 | 
				
			||||||
func CreateRepository(doer, owner *user_model.User, opts repo_module.CreateRepoOptions) (*repo_model.Repository, error) {
 | 
					func CreateRepository(ctx context.Context, doer, owner *user_model.User, opts repo_module.CreateRepoOptions) (*repo_model.Repository, error) {
 | 
				
			||||||
	repo, err := repo_module.CreateRepository(doer, owner, opts)
 | 
						repo, err := repo_module.CreateRepository(doer, owner, opts)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		// No need to rollback here we should do this in CreateRepository...
 | 
							// No need to rollback here we should do this in CreateRepository...
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	notification.NotifyCreateRepository(db.DefaultContext, doer, owner, repo)
 | 
						notification.NotifyCreateRepository(ctx, doer, owner, repo)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return repo, nil
 | 
						return repo, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -55,10 +55,10 @@ func DeleteRepository(ctx context.Context, doer *user_model.User, repo *repo_mod
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// PushCreateRepo creates a repository when a new repository is pushed to an appropriate namespace
 | 
					// PushCreateRepo creates a repository when a new repository is pushed to an appropriate namespace
 | 
				
			||||||
func PushCreateRepo(authUser, owner *user_model.User, repoName string) (*repo_model.Repository, error) {
 | 
					func PushCreateRepo(ctx context.Context, authUser, owner *user_model.User, repoName string) (*repo_model.Repository, error) {
 | 
				
			||||||
	if !authUser.IsAdmin {
 | 
						if !authUser.IsAdmin {
 | 
				
			||||||
		if owner.IsOrganization() {
 | 
							if owner.IsOrganization() {
 | 
				
			||||||
			if ok, err := organization.CanCreateOrgRepo(db.DefaultContext, owner.ID, authUser.ID); err != nil {
 | 
								if ok, err := organization.CanCreateOrgRepo(ctx, owner.ID, authUser.ID); err != nil {
 | 
				
			||||||
				return nil, err
 | 
									return nil, err
 | 
				
			||||||
			} else if !ok {
 | 
								} else if !ok {
 | 
				
			||||||
				return nil, fmt.Errorf("cannot push-create repository for org")
 | 
									return nil, fmt.Errorf("cannot push-create repository for org")
 | 
				
			||||||
@@ -68,7 +68,7 @@ func PushCreateRepo(authUser, owner *user_model.User, repoName string) (*repo_mo
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	repo, err := CreateRepository(authUser, owner, repo_module.CreateRepoOptions{
 | 
						repo, err := CreateRepository(ctx, authUser, owner, repo_module.CreateRepoOptions{
 | 
				
			||||||
		Name:      repoName,
 | 
							Name:      repoName,
 | 
				
			||||||
		IsPrivate: setting.Repository.DefaultPushCreatePrivate,
 | 
							IsPrivate: setting.Repository.DefaultPushCreatePrivate,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
@@ -88,8 +88,8 @@ func Init() error {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// UpdateRepository updates a repository
 | 
					// UpdateRepository updates a repository
 | 
				
			||||||
func UpdateRepository(repo *repo_model.Repository, visibilityChanged bool) (err error) {
 | 
					func UpdateRepository(ctx context.Context, repo *repo_model.Repository, visibilityChanged bool) (err error) {
 | 
				
			||||||
	ctx, committer, err := db.TxContext(db.DefaultContext)
 | 
						ctx, committer, err := db.TxContext(ctx)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,20 +4,21 @@
 | 
				
			|||||||
package repository
 | 
					package repository
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"code.gitea.io/gitea/models/db"
 | 
						"context"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models/organization"
 | 
						"code.gitea.io/gitea/models/organization"
 | 
				
			||||||
	"code.gitea.io/gitea/models/perm"
 | 
						"code.gitea.io/gitea/models/perm"
 | 
				
			||||||
	repo_model "code.gitea.io/gitea/models/repo"
 | 
						repo_model "code.gitea.io/gitea/models/repo"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetReviewerTeams get all teams can be requested to review
 | 
					// GetReviewerTeams get all teams can be requested to review
 | 
				
			||||||
func GetReviewerTeams(repo *repo_model.Repository) ([]*organization.Team, error) {
 | 
					func GetReviewerTeams(ctx context.Context, repo *repo_model.Repository) ([]*organization.Team, error) {
 | 
				
			||||||
	if err := repo.LoadOwner(db.DefaultContext); err != nil {
 | 
						if err := repo.LoadOwner(ctx); err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if !repo.Owner.IsOrganization() {
 | 
						if !repo.Owner.IsOrganization() {
 | 
				
			||||||
		return nil, nil
 | 
							return nil, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return organization.GetTeamsWithAccessToRepo(db.DefaultContext, repo.OwnerID, repo.ID, perm.AccessModeRead)
 | 
						return organization.GetTeamsWithAccessToRepo(ctx, repo.OwnerID, repo.ID, perm.AccessModeRead)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,6 +6,7 @@ package repository
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/models/db"
 | 
				
			||||||
	repo_model "code.gitea.io/gitea/models/repo"
 | 
						repo_model "code.gitea.io/gitea/models/repo"
 | 
				
			||||||
	"code.gitea.io/gitea/models/unittest"
 | 
						"code.gitea.io/gitea/models/unittest"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -16,12 +17,12 @@ func TestRepoGetReviewerTeams(t *testing.T) {
 | 
				
			|||||||
	assert.NoError(t, unittest.PrepareTestDatabase())
 | 
						assert.NoError(t, unittest.PrepareTestDatabase())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	repo2 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2})
 | 
						repo2 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2})
 | 
				
			||||||
	teams, err := GetReviewerTeams(repo2)
 | 
						teams, err := GetReviewerTeams(db.DefaultContext, repo2)
 | 
				
			||||||
	assert.NoError(t, err)
 | 
						assert.NoError(t, err)
 | 
				
			||||||
	assert.Empty(t, teams)
 | 
						assert.Empty(t, teams)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	repo3 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 3})
 | 
						repo3 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 3})
 | 
				
			||||||
	teams, err = GetReviewerTeams(repo3)
 | 
						teams, err = GetReviewerTeams(db.DefaultContext, repo3)
 | 
				
			||||||
	assert.NoError(t, err)
 | 
						assert.NoError(t, err)
 | 
				
			||||||
	assert.Len(t, teams, 2)
 | 
						assert.Len(t, teams, 2)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,7 +40,7 @@ func GenerateIssueLabels(ctx context.Context, templateRepo, generateRepo *repo_m
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GenerateRepository generates a repository from a template
 | 
					// GenerateRepository generates a repository from a template
 | 
				
			||||||
func GenerateRepository(doer, owner *user_model.User, templateRepo *repo_model.Repository, opts repo_module.GenerateRepoOptions) (_ *repo_model.Repository, err error) {
 | 
					func GenerateRepository(ctx context.Context, doer, owner *user_model.User, templateRepo *repo_model.Repository, opts repo_module.GenerateRepoOptions) (_ *repo_model.Repository, err error) {
 | 
				
			||||||
	if !doer.IsAdmin && !owner.CanCreateRepo() {
 | 
						if !doer.IsAdmin && !owner.CanCreateRepo() {
 | 
				
			||||||
		return nil, repo_model.ErrReachLimitOfRepo{
 | 
							return nil, repo_model.ErrReachLimitOfRepo{
 | 
				
			||||||
			Limit: owner.MaxRepoCreation,
 | 
								Limit: owner.MaxRepoCreation,
 | 
				
			||||||
@@ -48,7 +48,7 @@ func GenerateRepository(doer, owner *user_model.User, templateRepo *repo_model.R
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var generateRepo *repo_model.Repository
 | 
						var generateRepo *repo_model.Repository
 | 
				
			||||||
	if err = db.WithTx(db.DefaultContext, func(ctx context.Context) error {
 | 
						if err = db.WithTx(ctx, func(ctx context.Context) error {
 | 
				
			||||||
		generateRepo, err = repo_module.GenerateRepository(ctx, doer, owner, templateRepo, opts)
 | 
							generateRepo, err = repo_module.GenerateRepository(ctx, doer, owner, templateRepo, opts)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
@@ -101,7 +101,7 @@ func GenerateRepository(doer, owner *user_model.User, templateRepo *repo_model.R
 | 
				
			|||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	notification.NotifyCreateRepository(db.DefaultContext, doer, owner, generateRepo)
 | 
						notification.NotifyCreateRepository(ctx, doer, owner, generateRepo)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return generateRepo, nil
 | 
						return generateRepo, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,6 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/models/db"
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/models/organization"
 | 
						"code.gitea.io/gitea/models/organization"
 | 
				
			||||||
	"code.gitea.io/gitea/models/perm"
 | 
						"code.gitea.io/gitea/models/perm"
 | 
				
			||||||
	access_model "code.gitea.io/gitea/models/perm/access"
 | 
						access_model "code.gitea.io/gitea/models/perm/access"
 | 
				
			||||||
@@ -61,7 +60,7 @@ func TransferOwnership(ctx context.Context, doer, newOwner *user_model.User, rep
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ChangeRepositoryName changes all corresponding setting from old repository name to new one.
 | 
					// ChangeRepositoryName changes all corresponding setting from old repository name to new one.
 | 
				
			||||||
func ChangeRepositoryName(doer *user_model.User, repo *repo_model.Repository, newRepoName string) error {
 | 
					func ChangeRepositoryName(ctx context.Context, doer *user_model.User, repo *repo_model.Repository, newRepoName string) error {
 | 
				
			||||||
	log.Trace("ChangeRepositoryName: %s/%s -> %s", doer.Name, repo.Name, newRepoName)
 | 
						log.Trace("ChangeRepositoryName: %s/%s -> %s", doer.Name, repo.Name, newRepoName)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	oldRepoName := repo.Name
 | 
						oldRepoName := repo.Name
 | 
				
			||||||
@@ -78,7 +77,7 @@ func ChangeRepositoryName(doer *user_model.User, repo *repo_model.Repository, ne
 | 
				
			|||||||
	repoWorkingPool.CheckOut(fmt.Sprint(repo.ID))
 | 
						repoWorkingPool.CheckOut(fmt.Sprint(repo.ID))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	repo.Name = newRepoName
 | 
						repo.Name = newRepoName
 | 
				
			||||||
	notification.NotifyRenameRepository(db.DefaultContext, doer, repo, oldRepoName)
 | 
						notification.NotifyRenameRepository(ctx, doer, repo, oldRepoName)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -356,7 +356,7 @@ func TestConflictChecking(t *testing.T) {
 | 
				
			|||||||
		user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
 | 
							user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Create new clean repo to test conflict checking.
 | 
							// Create new clean repo to test conflict checking.
 | 
				
			||||||
		baseRepo, err := repo_service.CreateRepository(user, user, repo_module.CreateRepoOptions{
 | 
							baseRepo, err := repo_service.CreateRepository(db.DefaultContext, user, user, repo_module.CreateRepoOptions{
 | 
				
			||||||
			Name:          "conflict-checking",
 | 
								Name:          "conflict-checking",
 | 
				
			||||||
			Description:   "Tempo repo",
 | 
								Description:   "Tempo repo",
 | 
				
			||||||
			AutoInit:      true,
 | 
								AutoInit:      true,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -80,7 +80,7 @@ func TestAPIPullUpdateByRebase(t *testing.T) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func createOutdatedPR(t *testing.T, actor, forkOrg *user_model.User) *issues_model.PullRequest {
 | 
					func createOutdatedPR(t *testing.T, actor, forkOrg *user_model.User) *issues_model.PullRequest {
 | 
				
			||||||
	baseRepo, err := repo_service.CreateRepository(actor, actor, repo_module.CreateRepoOptions{
 | 
						baseRepo, err := repo_service.CreateRepository(db.DefaultContext, actor, actor, repo_module.CreateRepoOptions{
 | 
				
			||||||
		Name:        "repo-pr-update",
 | 
							Name:        "repo-pr-update",
 | 
				
			||||||
		Description: "repo-tmp-pr-update description",
 | 
							Description: "repo-tmp-pr-update description",
 | 
				
			||||||
		AutoInit:    true,
 | 
							AutoInit:    true,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user