mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-01 05:36:19 +01:00
Move some functions into services/repository (#17660)
This commit is contained in:
parent
447428f446
commit
48ccd325a1
19 changed files with 114 additions and 136 deletions
|
@ -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 {
|
||||||
|
|
Loading…
Reference in a new issue