mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09: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