mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 20:36:07 +01:00 
			
		
		
		
	Move some functions into services/repository (#17660)
This commit is contained in:
		@@ -13,7 +13,6 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/models/unittest"
 | 
						"code.gitea.io/gitea/models/unittest"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/repofiles"
 | 
						"code.gitea.io/gitea/modules/repofiles"
 | 
				
			||||||
	repo_module "code.gitea.io/gitea/modules/repository"
 | 
					 | 
				
			||||||
	pull_service "code.gitea.io/gitea/services/pull"
 | 
						pull_service "code.gitea.io/gitea/services/pull"
 | 
				
			||||||
	repo_service "code.gitea.io/gitea/services/repository"
 | 
						repo_service "code.gitea.io/gitea/services/repository"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -89,7 +88,7 @@ func createOutdatedPR(t *testing.T, actor, forkOrg *models.User) *models.PullReq
 | 
				
			|||||||
	assert.NoError(t, err)
 | 
						assert.NoError(t, err)
 | 
				
			||||||
	assert.NotEmpty(t, baseRepo)
 | 
						assert.NotEmpty(t, baseRepo)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	headRepo, err := repo_module.ForkRepository(actor, forkOrg, models.ForkRepoOptions{
 | 
						headRepo, err := repo_service.ForkRepository(actor, forkOrg, models.ForkRepoOptions{
 | 
				
			||||||
		BaseRepo:    baseRepo,
 | 
							BaseRepo:    baseRepo,
 | 
				
			||||||
		Name:        "repo-pr-update",
 | 
							Name:        "repo-pr-update",
 | 
				
			||||||
		Description: "desc",
 | 
							Description: "desc",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -196,92 +196,6 @@ func checkInitRepository(owner, name string) (err error) {
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func adoptRepository(ctx context.Context, repoPath string, u *models.User, repo *models.Repository, opts models.CreateRepoOptions) (err error) {
 | 
					 | 
				
			||||||
	isExist, err := util.IsExist(repoPath)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		log.Error("Unable to check if %s exists. Error: %v", repoPath, err)
 | 
					 | 
				
			||||||
		return err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if !isExist {
 | 
					 | 
				
			||||||
		return fmt.Errorf("adoptRepository: path does not already exist: %s", repoPath)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if err := createDelegateHooks(repoPath); err != nil {
 | 
					 | 
				
			||||||
		return fmt.Errorf("createDelegateHooks: %v", err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Re-fetch the repository from database before updating it (else it would
 | 
					 | 
				
			||||||
	// override changes that were done earlier with sql)
 | 
					 | 
				
			||||||
	if repo, err = models.GetRepositoryByIDCtx(ctx, repo.ID); err != nil {
 | 
					 | 
				
			||||||
		return fmt.Errorf("getRepositoryByID: %v", err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	repo.IsEmpty = false
 | 
					 | 
				
			||||||
	gitRepo, err := git.OpenRepository(repo.RepoPath())
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return fmt.Errorf("openRepository: %v", err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	defer gitRepo.Close()
 | 
					 | 
				
			||||||
	if len(opts.DefaultBranch) > 0 {
 | 
					 | 
				
			||||||
		repo.DefaultBranch = opts.DefaultBranch
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if err = gitRepo.SetDefaultBranch(repo.DefaultBranch); err != nil {
 | 
					 | 
				
			||||||
			return fmt.Errorf("setDefaultBranch: %v", err)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		repo.DefaultBranch, err = gitRepo.GetDefaultBranch()
 | 
					 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			repo.DefaultBranch = setting.Repository.DefaultBranch
 | 
					 | 
				
			||||||
			if err = gitRepo.SetDefaultBranch(repo.DefaultBranch); err != nil {
 | 
					 | 
				
			||||||
				return fmt.Errorf("setDefaultBranch: %v", err)
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		repo.DefaultBranch = strings.TrimPrefix(repo.DefaultBranch, git.BranchPrefix)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	branches, _, _ := gitRepo.GetBranches(0, 0)
 | 
					 | 
				
			||||||
	found := false
 | 
					 | 
				
			||||||
	hasDefault := false
 | 
					 | 
				
			||||||
	hasMaster := false
 | 
					 | 
				
			||||||
	hasMain := false
 | 
					 | 
				
			||||||
	for _, branch := range branches {
 | 
					 | 
				
			||||||
		if branch == repo.DefaultBranch {
 | 
					 | 
				
			||||||
			found = true
 | 
					 | 
				
			||||||
			break
 | 
					 | 
				
			||||||
		} else if branch == setting.Repository.DefaultBranch {
 | 
					 | 
				
			||||||
			hasDefault = true
 | 
					 | 
				
			||||||
		} else if branch == "master" {
 | 
					 | 
				
			||||||
			hasMaster = true
 | 
					 | 
				
			||||||
		} else if branch == "main" {
 | 
					 | 
				
			||||||
			hasMain = true
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if !found {
 | 
					 | 
				
			||||||
		if hasDefault {
 | 
					 | 
				
			||||||
			repo.DefaultBranch = setting.Repository.DefaultBranch
 | 
					 | 
				
			||||||
		} else if hasMaster {
 | 
					 | 
				
			||||||
			repo.DefaultBranch = "master"
 | 
					 | 
				
			||||||
		} else if hasMain {
 | 
					 | 
				
			||||||
			repo.DefaultBranch = "main"
 | 
					 | 
				
			||||||
		} else if len(branches) > 0 {
 | 
					 | 
				
			||||||
			repo.DefaultBranch = branches[0]
 | 
					 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			repo.IsEmpty = true
 | 
					 | 
				
			||||||
			repo.DefaultBranch = setting.Repository.DefaultBranch
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if err = gitRepo.SetDefaultBranch(repo.DefaultBranch); err != nil {
 | 
					 | 
				
			||||||
			return fmt.Errorf("setDefaultBranch: %v", err)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if err = models.UpdateRepositoryCtx(ctx, repo, false); err != nil {
 | 
					 | 
				
			||||||
		return fmt.Errorf("updateRepository: %v", err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// InitRepository initializes README and .gitignore if needed.
 | 
					// InitRepository initializes README and .gitignore if needed.
 | 
				
			||||||
func initRepository(ctx context.Context, repoPath string, u *models.User, repo *models.Repository, opts models.CreateRepoOptions) (err error) {
 | 
					func initRepository(ctx context.Context, repoPath string, u *models.User, repo *models.Repository, opts models.CreateRepoOptions) (err error) {
 | 
				
			||||||
	if err = checkInitRepository(repo.OwnerName, repo.Name); err != nil {
 | 
						if err = checkInitRepository(repo.OwnerName, repo.Name); err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,9 +9,9 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/repository"
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"code.gitea.io/gitea/modules/util"
 | 
				
			||||||
	"code.gitea.io/gitea/routers/api/v1/utils"
 | 
						"code.gitea.io/gitea/routers/api/v1/utils"
 | 
				
			||||||
 | 
						repo_service "code.gitea.io/gitea/services/repository"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ListUnadoptedRepositories lists the unadopted repositories that match the provided names
 | 
					// ListUnadoptedRepositories lists the unadopted repositories that match the provided names
 | 
				
			||||||
@@ -41,7 +41,7 @@ func ListUnadoptedRepositories(ctx *context.APIContext) {
 | 
				
			|||||||
	//     "$ref": "#/responses/forbidden"
 | 
						//     "$ref": "#/responses/forbidden"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	listOptions := utils.GetListOptions(ctx)
 | 
						listOptions := utils.GetListOptions(ctx)
 | 
				
			||||||
	repoNames, count, err := repository.ListUnadoptedRepositories(ctx.FormString("query"), &listOptions)
 | 
						repoNames, count, err := repo_service.ListUnadoptedRepositories(ctx.FormString("query"), &listOptions)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		ctx.InternalServerError(err)
 | 
							ctx.InternalServerError(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -104,7 +104,7 @@ func AdoptRepository(ctx *context.APIContext) {
 | 
				
			|||||||
		ctx.NotFound()
 | 
							ctx.NotFound()
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if _, err := repository.AdoptRepository(ctx.User, ctxUser, models.CreateRepoOptions{
 | 
						if _, err := repo_service.AdoptRepository(ctx.User, ctxUser, models.CreateRepoOptions{
 | 
				
			||||||
		Name:      repoName,
 | 
							Name:      repoName,
 | 
				
			||||||
		IsPrivate: true,
 | 
							IsPrivate: true,
 | 
				
			||||||
	}); err != nil {
 | 
						}); err != nil {
 | 
				
			||||||
@@ -167,7 +167,7 @@ func DeleteUnadoptedRepository(ctx *context.APIContext) {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := repository.DeleteUnadoptedRepository(ctx.User, ctxUser, repoName); err != nil {
 | 
						if err := repo_service.DeleteUnadoptedRepository(ctx.User, ctxUser, repoName); err != nil {
 | 
				
			||||||
		ctx.InternalServerError(err)
 | 
							ctx.InternalServerError(err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,11 +8,11 @@ import (
 | 
				
			|||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/cron"
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/structs"
 | 
						"code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"code.gitea.io/gitea/modules/util"
 | 
				
			||||||
	"code.gitea.io/gitea/routers/api/v1/utils"
 | 
						"code.gitea.io/gitea/routers/api/v1/utils"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/services/cron"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ListCronTasks api for getting cron tasks
 | 
					// ListCronTasks api for getting cron tasks
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,6 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/appstate"
 | 
						"code.gitea.io/gitea/modules/appstate"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/cache"
 | 
						"code.gitea.io/gitea/modules/cache"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/cron"
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/modules/eventsource"
 | 
						"code.gitea.io/gitea/modules/eventsource"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/git"
 | 
						"code.gitea.io/gitea/modules/git"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/highlight"
 | 
						"code.gitea.io/gitea/modules/highlight"
 | 
				
			||||||
@@ -42,6 +41,7 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/services/archiver"
 | 
						"code.gitea.io/gitea/services/archiver"
 | 
				
			||||||
	"code.gitea.io/gitea/services/auth"
 | 
						"code.gitea.io/gitea/services/auth"
 | 
				
			||||||
	"code.gitea.io/gitea/services/auth/source/oauth2"
 | 
						"code.gitea.io/gitea/services/auth/source/oauth2"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/services/cron"
 | 
				
			||||||
	"code.gitea.io/gitea/services/mailer"
 | 
						"code.gitea.io/gitea/services/mailer"
 | 
				
			||||||
	mirror_service "code.gitea.io/gitea/services/mirror"
 | 
						mirror_service "code.gitea.io/gitea/services/mirror"
 | 
				
			||||||
	pull_service "code.gitea.io/gitea/services/pull"
 | 
						pull_service "code.gitea.io/gitea/services/pull"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,6 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/base"
 | 
						"code.gitea.io/gitea/modules/base"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/cron"
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/modules/git"
 | 
						"code.gitea.io/gitea/modules/git"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/json"
 | 
						"code.gitea.io/gitea/modules/json"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
@@ -28,6 +27,7 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/timeutil"
 | 
						"code.gitea.io/gitea/modules/timeutil"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/updatechecker"
 | 
						"code.gitea.io/gitea/modules/updatechecker"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/web"
 | 
						"code.gitea.io/gitea/modules/web"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/services/cron"
 | 
				
			||||||
	"code.gitea.io/gitea/services/forms"
 | 
						"code.gitea.io/gitea/services/forms"
 | 
				
			||||||
	"code.gitea.io/gitea/services/mailer"
 | 
						"code.gitea.io/gitea/services/mailer"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,7 +14,6 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/base"
 | 
						"code.gitea.io/gitea/modules/base"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/repository"
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"code.gitea.io/gitea/modules/util"
 | 
				
			||||||
	"code.gitea.io/gitea/routers/web/explore"
 | 
						"code.gitea.io/gitea/routers/web/explore"
 | 
				
			||||||
@@ -95,7 +94,7 @@ func UnadoptedRepos(ctx *context.Context) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.Data["Keyword"] = q
 | 
						ctx.Data["Keyword"] = q
 | 
				
			||||||
	repoNames, count, err := repository.ListUnadoptedRepositories(q, &opts)
 | 
						repoNames, count, err := repo_service.ListUnadoptedRepositories(q, &opts)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		ctx.ServerError("ListUnadoptedRepositories", err)
 | 
							ctx.ServerError("ListUnadoptedRepositories", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -147,7 +146,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 := repository.AdoptRepository(ctx.User, ctxUser, models.CreateRepoOptions{
 | 
							if _, err := repo_service.AdoptRepository(ctx.User, ctxUser, models.CreateRepoOptions{
 | 
				
			||||||
			Name:      dirSplit[1],
 | 
								Name:      dirSplit[1],
 | 
				
			||||||
			IsPrivate: true,
 | 
								IsPrivate: true,
 | 
				
			||||||
		}); err != nil {
 | 
							}); err != nil {
 | 
				
			||||||
@@ -156,7 +155,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 := repository.DeleteUnadoptedRepository(ctx.User, ctxUser, dirSplit[1]); err != nil {
 | 
							if err := repo_service.DeleteUnadoptedRepository(ctx.User, ctxUser, dirSplit[1]); err != nil {
 | 
				
			||||||
			ctx.ServerError("repository.AdoptRepository", err)
 | 
								ctx.ServerError("repository.AdoptRepository", err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -557,7 +557,7 @@ func SettingsPost(ctx *context.Context) {
 | 
				
			|||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if err := repository.ConvertForkToNormalRepository(repo); err != nil {
 | 
							if err := repo_service.ConvertForkToNormalRepository(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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,9 +9,9 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/repository"
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"code.gitea.io/gitea/modules/util"
 | 
				
			||||||
 | 
						repo_service "code.gitea.io/gitea/services/repository"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// AdoptOrDeleteRepository adopts or deletes a repository
 | 
					// AdoptOrDeleteRepository adopts or deletes a repository
 | 
				
			||||||
@@ -44,7 +44,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 := repository.AdoptRepository(ctxUser, ctxUser, models.CreateRepoOptions{
 | 
							if _, err := repo_service.AdoptRepository(ctxUser, ctxUser, models.CreateRepoOptions{
 | 
				
			||||||
			Name:      dir,
 | 
								Name:      dir,
 | 
				
			||||||
			IsPrivate: true,
 | 
								IsPrivate: true,
 | 
				
			||||||
		}); err != nil {
 | 
							}); err != nil {
 | 
				
			||||||
@@ -53,7 +53,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 := repository.DeleteUnadoptedRepository(ctxUser, ctxUser, dir); err != nil {
 | 
							if err := repo_service.DeleteUnadoptedRepository(ctxUser, ctxUser, dir); err != nil {
 | 
				
			||||||
			ctx.ServerError("repository.AdoptRepository", err)
 | 
								ctx.ServerError("repository.AdoptRepository", err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,6 +12,7 @@ import (
 | 
				
			|||||||
	repo_module "code.gitea.io/gitea/modules/repository"
 | 
						repo_module "code.gitea.io/gitea/modules/repository"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/updatechecker"
 | 
						"code.gitea.io/gitea/modules/updatechecker"
 | 
				
			||||||
 | 
						repo_service "code.gitea.io/gitea/services/repository"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func registerDeleteInactiveUsers() {
 | 
					func registerDeleteInactiveUsers() {
 | 
				
			||||||
@@ -34,7 +35,7 @@ func registerDeleteRepositoryArchives() {
 | 
				
			|||||||
		RunAtStart: false,
 | 
							RunAtStart: false,
 | 
				
			||||||
		Schedule:   "@annually",
 | 
							Schedule:   "@annually",
 | 
				
			||||||
	}, func(ctx context.Context, _ *models.User, _ Config) error {
 | 
						}, func(ctx context.Context, _ *models.User, _ Config) error {
 | 
				
			||||||
		return repo_module.DeleteRepositoryArchives(ctx)
 | 
							return repo_service.DeleteRepositoryArchives(ctx)
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -15,12 +15,15 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/models/db"
 | 
						"code.gitea.io/gitea/models/db"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/git"
 | 
						"code.gitea.io/gitea/modules/git"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/notification"
 | 
				
			||||||
 | 
						repo_module "code.gitea.io/gitea/modules/repository"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"code.gitea.io/gitea/modules/util"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/gobwas/glob"
 | 
						"github.com/gobwas/glob"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// AdoptRepository adopts a repository for the user/organization.
 | 
					// AdoptRepository adopts pre-existing repository files for the user/organization.
 | 
				
			||||||
func AdoptRepository(doer, u *models.User, opts models.CreateRepoOptions) (*models.Repository, error) {
 | 
					func AdoptRepository(doer, u *models.User, opts models.CreateRepoOptions) (*models.Repository, error) {
 | 
				
			||||||
	if !doer.IsAdmin && !u.CanCreateRepo() {
 | 
						if !doer.IsAdmin && !u.CanCreateRepo() {
 | 
				
			||||||
		return nil, models.ErrReachLimitOfRepo{
 | 
							return nil, models.ErrReachLimitOfRepo{
 | 
				
			||||||
@@ -90,9 +93,97 @@ func AdoptRepository(doer, u *models.User, opts models.CreateRepoOptions) (*mode
 | 
				
			|||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						notification.NotifyCreateRepository(doer, u, repo)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return repo, nil
 | 
						return repo, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func adoptRepository(ctx context.Context, repoPath string, u *models.User, repo *models.Repository, opts models.CreateRepoOptions) (err error) {
 | 
				
			||||||
 | 
						isExist, err := util.IsExist(repoPath)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							log.Error("Unable to check if %s exists. Error: %v", repoPath, err)
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if !isExist {
 | 
				
			||||||
 | 
							return fmt.Errorf("adoptRepository: path does not already exist: %s", repoPath)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err := repo_module.CreateDelegateHooks(repoPath); err != nil {
 | 
				
			||||||
 | 
							return fmt.Errorf("createDelegateHooks: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Re-fetch the repository from database before updating it (else it would
 | 
				
			||||||
 | 
						// override changes that were done earlier with sql)
 | 
				
			||||||
 | 
						if repo, err = models.GetRepositoryByIDCtx(ctx, repo.ID); err != nil {
 | 
				
			||||||
 | 
							return fmt.Errorf("getRepositoryByID: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						repo.IsEmpty = false
 | 
				
			||||||
 | 
						gitRepo, err := git.OpenRepository(repo.RepoPath())
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return fmt.Errorf("openRepository: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						defer gitRepo.Close()
 | 
				
			||||||
 | 
						if len(opts.DefaultBranch) > 0 {
 | 
				
			||||||
 | 
							repo.DefaultBranch = opts.DefaultBranch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if err = gitRepo.SetDefaultBranch(repo.DefaultBranch); err != nil {
 | 
				
			||||||
 | 
								return fmt.Errorf("setDefaultBranch: %v", err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							repo.DefaultBranch, err = gitRepo.GetDefaultBranch()
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								repo.DefaultBranch = setting.Repository.DefaultBranch
 | 
				
			||||||
 | 
								if err = gitRepo.SetDefaultBranch(repo.DefaultBranch); err != nil {
 | 
				
			||||||
 | 
									return fmt.Errorf("setDefaultBranch: %v", err)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							repo.DefaultBranch = strings.TrimPrefix(repo.DefaultBranch, git.BranchPrefix)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						branches, _, _ := gitRepo.GetBranches(0, 0)
 | 
				
			||||||
 | 
						found := false
 | 
				
			||||||
 | 
						hasDefault := false
 | 
				
			||||||
 | 
						hasMaster := false
 | 
				
			||||||
 | 
						hasMain := false
 | 
				
			||||||
 | 
						for _, branch := range branches {
 | 
				
			||||||
 | 
							if branch == repo.DefaultBranch {
 | 
				
			||||||
 | 
								found = true
 | 
				
			||||||
 | 
								break
 | 
				
			||||||
 | 
							} else if branch == setting.Repository.DefaultBranch {
 | 
				
			||||||
 | 
								hasDefault = true
 | 
				
			||||||
 | 
							} else if branch == "master" {
 | 
				
			||||||
 | 
								hasMaster = true
 | 
				
			||||||
 | 
							} else if branch == "main" {
 | 
				
			||||||
 | 
								hasMain = true
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if !found {
 | 
				
			||||||
 | 
							if hasDefault {
 | 
				
			||||||
 | 
								repo.DefaultBranch = setting.Repository.DefaultBranch
 | 
				
			||||||
 | 
							} else if hasMaster {
 | 
				
			||||||
 | 
								repo.DefaultBranch = "master"
 | 
				
			||||||
 | 
							} else if hasMain {
 | 
				
			||||||
 | 
								repo.DefaultBranch = "main"
 | 
				
			||||||
 | 
							} else if len(branches) > 0 {
 | 
				
			||||||
 | 
								repo.DefaultBranch = branches[0]
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								repo.IsEmpty = true
 | 
				
			||||||
 | 
								repo.DefaultBranch = setting.Repository.DefaultBranch
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if err = gitRepo.SetDefaultBranch(repo.DefaultBranch); err != nil {
 | 
				
			||||||
 | 
								return fmt.Errorf("setDefaultBranch: %v", err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err = models.UpdateRepositoryCtx(ctx, repo, false); err != nil {
 | 
				
			||||||
 | 
							return fmt.Errorf("updateRepository: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DeleteUnadoptedRepository deletes unadopted repository files from the filesystem
 | 
					// DeleteUnadoptedRepository deletes unadopted repository files from the filesystem
 | 
				
			||||||
func DeleteUnadoptedRepository(doer, u *models.User, repoName string) error {
 | 
					func DeleteUnadoptedRepository(doer, u *models.User, repoName string) error {
 | 
				
			||||||
	if err := models.IsUsableRepoName(repoName); err != nil {
 | 
						if err := models.IsUsableRepoName(repoName); err != nil {
 | 
				
			||||||
@@ -14,6 +14,8 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/models/db"
 | 
						"code.gitea.io/gitea/models/db"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/git"
 | 
						"code.gitea.io/gitea/modules/git"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/notification"
 | 
				
			||||||
 | 
						repo_module "code.gitea.io/gitea/modules/repository"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/structs"
 | 
						"code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"code.gitea.io/gitea/modules/util"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -116,7 +118,7 @@ func ForkRepository(doer, owner *models.User, opts models.ForkRepoOptions) (_ *m
 | 
				
			|||||||
			return fmt.Errorf("git update-server-info: %v", err)
 | 
								return fmt.Errorf("git update-server-info: %v", err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if err = createDelegateHooks(repoPath); err != nil {
 | 
							if err = repo_module.CreateDelegateHooks(repoPath); err != nil {
 | 
				
			||||||
			return fmt.Errorf("createDelegateHooks: %v", err)
 | 
								return fmt.Errorf("createDelegateHooks: %v", err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
@@ -136,6 +138,8 @@ func ForkRepository(doer, owner *models.User, opts models.ForkRepoOptions) (_ *m
 | 
				
			|||||||
		log.Error("Copy language stat from oldRepo failed")
 | 
							log.Error("Copy language stat from oldRepo failed")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						notification.NotifyForkRepository(doer, opts.BaseRepo, repo)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return repo, nil
 | 
						return repo, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -28,36 +28,6 @@ func CreateRepository(doer, owner *models.User, opts models.CreateRepoOptions) (
 | 
				
			|||||||
	return repo, nil
 | 
						return repo, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// AdoptRepository adopts pre-existing repository files for the user/organization.
 | 
					 | 
				
			||||||
func AdoptRepository(doer, owner *models.User, opts models.CreateRepoOptions) (*models.Repository, error) {
 | 
					 | 
				
			||||||
	repo, err := repo_module.AdoptRepository(doer, owner, opts)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		// No need to rollback here we should do this in AdoptRepository...
 | 
					 | 
				
			||||||
		return nil, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	notification.NotifyCreateRepository(doer, owner, repo)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return repo, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// DeleteUnadoptedRepository adopts pre-existing repository files for the user/organization.
 | 
					 | 
				
			||||||
func DeleteUnadoptedRepository(doer, owner *models.User, name string) error {
 | 
					 | 
				
			||||||
	return repo_module.DeleteUnadoptedRepository(doer, owner, name)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// ForkRepository forks a repository
 | 
					 | 
				
			||||||
func ForkRepository(doer, u *models.User, opts models.ForkRepoOptions) (*models.Repository, error) {
 | 
					 | 
				
			||||||
	repo, err := repo_module.ForkRepository(doer, u, opts)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return nil, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	notification.NotifyForkRepository(doer, opts.BaseRepo, repo)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return repo, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// DeleteRepository deletes a repository for a user or organization.
 | 
					// DeleteRepository deletes a repository for a user or organization.
 | 
				
			||||||
func DeleteRepository(doer *models.User, repo *models.Repository) error {
 | 
					func DeleteRepository(doer *models.User, repo *models.Repository) error {
 | 
				
			||||||
	if err := pull_service.CloseRepoBranchesPulls(doer, repo); err != nil {
 | 
						if err := pull_service.CloseRepoBranchesPulls(doer, repo); err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user