mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-06-22 17:10:51 +00:00
Some checks are pending
/ release (push) Waiting to run
testing / backend-checks (push) Has been skipped
testing / frontend-checks (push) Has been skipped
testing / test-unit (push) Has been skipped
testing / test-mysql (push) Has been skipped
testing / test-e2e (push) Has been skipped
testing / test-pgsql (push) Has been skipped
testing / test-sqlite (push) Has been skipped
testing / test-remote-cacher (redis) (push) Has been skipped
testing / test-remote-cacher (valkey) (push) Has been skipped
testing / test-remote-cacher (garnet) (push) Has been skipped
testing / test-remote-cacher (redict) (push) Has been skipped
testing / security-check (push) Has been skipped
The translation of `settings.adopt` is not actually used, it is set as the title for a POST handler that does not actually render any template. It does render the the 'Internal server error' template, however for safety reasons it does not use the set context data. Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/7451 Reviewed-by: 0ko <0ko@noreply.codeberg.org> Co-authored-by: Gusted <postmaster@gusted.xyz> Co-committed-by: Gusted <postmaster@gusted.xyz>
60 lines
1.8 KiB
Go
60 lines
1.8 KiB
Go
// Copyright 2020 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package setting
|
|
|
|
import (
|
|
"path/filepath"
|
|
|
|
repo_model "forgejo.org/models/repo"
|
|
user_model "forgejo.org/models/user"
|
|
"forgejo.org/modules/setting"
|
|
"forgejo.org/modules/util"
|
|
"forgejo.org/services/context"
|
|
repo_service "forgejo.org/services/repository"
|
|
)
|
|
|
|
// AdoptOrDeleteRepository adopts or deletes a repository
|
|
func AdoptOrDeleteRepository(ctx *context.Context) {
|
|
allowAdopt := ctx.IsUserSiteAdmin() || setting.Repository.AllowAdoptionOfUnadoptedRepositories
|
|
allowDelete := ctx.IsUserSiteAdmin() || setting.Repository.AllowDeleteOfUnadoptedRepositories
|
|
|
|
dir := ctx.FormString("id")
|
|
action := ctx.FormString("action")
|
|
|
|
ctxUser := ctx.Doer
|
|
root := user_model.UserPath(ctxUser.LowerName)
|
|
|
|
// check not a repo
|
|
has, err := repo_model.IsRepositoryModelExist(ctx, ctxUser, dir)
|
|
if err != nil {
|
|
ctx.ServerError("IsRepositoryExist", err)
|
|
return
|
|
}
|
|
|
|
isDir, err := util.IsDir(filepath.Join(root, dir+".git"))
|
|
if err != nil {
|
|
ctx.ServerError("IsDir", err)
|
|
return
|
|
}
|
|
if has || !isDir {
|
|
// Fallthrough to failure mode
|
|
} else if action == "adopt" && allowAdopt {
|
|
if _, err := repo_service.AdoptRepository(ctx, ctxUser, ctxUser, repo_service.CreateRepoOptions{
|
|
Name: dir,
|
|
IsPrivate: true,
|
|
}); err != nil {
|
|
ctx.ServerError("repository.AdoptRepository", err)
|
|
return
|
|
}
|
|
ctx.Flash.Success(ctx.Tr("repo.adopt_preexisting_success", dir))
|
|
} else if action == "delete" && allowDelete {
|
|
if err := repo_service.DeleteUnadoptedRepository(ctx, ctxUser, ctxUser, dir); err != nil {
|
|
ctx.ServerError("repository.AdoptRepository", err)
|
|
return
|
|
}
|
|
ctx.Flash.Success(ctx.Tr("repo.delete_preexisting_success", dir))
|
|
}
|
|
|
|
ctx.Redirect(setting.AppSubURL + "/user/settings/repos")
|
|
}
|