code.gitea.io/gitea@v1.21.7/routers/web/user/setting/adopt.go (about) 1 // Copyright 2020 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package setting 5 6 import ( 7 "path/filepath" 8 9 repo_model "code.gitea.io/gitea/models/repo" 10 user_model "code.gitea.io/gitea/models/user" 11 "code.gitea.io/gitea/modules/context" 12 "code.gitea.io/gitea/modules/setting" 13 "code.gitea.io/gitea/modules/util" 14 repo_service "code.gitea.io/gitea/services/repository" 15 ) 16 17 // AdoptOrDeleteRepository adopts or deletes a repository 18 func AdoptOrDeleteRepository(ctx *context.Context) { 19 ctx.Data["Title"] = ctx.Tr("settings.adopt") 20 ctx.Data["PageIsSettingsRepos"] = true 21 allowAdopt := ctx.IsUserSiteAdmin() || setting.Repository.AllowAdoptionOfUnadoptedRepositories 22 ctx.Data["allowAdopt"] = allowAdopt 23 allowDelete := ctx.IsUserSiteAdmin() || setting.Repository.AllowDeleteOfUnadoptedRepositories 24 ctx.Data["allowDelete"] = allowDelete 25 26 dir := ctx.FormString("id") 27 action := ctx.FormString("action") 28 29 ctxUser := ctx.Doer 30 root := user_model.UserPath(ctxUser.LowerName) 31 32 // check not a repo 33 has, err := repo_model.IsRepositoryModelExist(ctx, ctxUser, dir) 34 if err != nil { 35 ctx.ServerError("IsRepositoryExist", err) 36 return 37 } 38 39 isDir, err := util.IsDir(filepath.Join(root, dir+".git")) 40 if err != nil { 41 ctx.ServerError("IsDir", err) 42 return 43 } 44 if has || !isDir { 45 // Fallthrough to failure mode 46 } else if action == "adopt" && allowAdopt { 47 if _, err := repo_service.AdoptRepository(ctx, ctxUser, ctxUser, repo_service.CreateRepoOptions{ 48 Name: dir, 49 IsPrivate: true, 50 }); err != nil { 51 ctx.ServerError("repository.AdoptRepository", err) 52 return 53 } 54 ctx.Flash.Success(ctx.Tr("repo.adopt_preexisting_success", dir)) 55 } else if action == "delete" && allowDelete { 56 if err := repo_service.DeleteUnadoptedRepository(ctx, ctxUser, ctxUser, dir); err != nil { 57 ctx.ServerError("repository.AdoptRepository", err) 58 return 59 } 60 ctx.Flash.Success(ctx.Tr("repo.delete_preexisting_success", dir)) 61 } 62 63 ctx.Redirect(setting.AppSubURL + "/user/settings/repos") 64 }