code.gitea.io/gitea@v1.21.7/routers/private/internal_repo.go (about) 1 // Copyright 2021 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package private 5 6 import ( 7 "context" 8 "fmt" 9 "net/http" 10 11 repo_model "code.gitea.io/gitea/models/repo" 12 gitea_context "code.gitea.io/gitea/modules/context" 13 "code.gitea.io/gitea/modules/git" 14 "code.gitea.io/gitea/modules/log" 15 "code.gitea.io/gitea/modules/private" 16 ) 17 18 // This file contains common functions relating to setting the Repository for the internal routes 19 20 // RepoAssignment assigns the repository and gitrepository to the private context 21 func RepoAssignment(ctx *gitea_context.PrivateContext) context.CancelFunc { 22 ownerName := ctx.Params(":owner") 23 repoName := ctx.Params(":repo") 24 25 repo := loadRepository(ctx, ownerName, repoName) 26 if ctx.Written() { 27 // Error handled in loadRepository 28 return nil 29 } 30 31 gitRepo, err := git.OpenRepository(ctx, repo.RepoPath()) 32 if err != nil { 33 log.Error("Failed to open repository: %s/%s Error: %v", ownerName, repoName, err) 34 ctx.JSON(http.StatusInternalServerError, private.Response{ 35 Err: fmt.Sprintf("Failed to open repository: %s/%s Error: %v", ownerName, repoName, err), 36 }) 37 return nil 38 } 39 40 ctx.Repo = &gitea_context.Repository{ 41 Repository: repo, 42 GitRepo: gitRepo, 43 } 44 45 // We opened it, we should close it 46 cancel := func() { 47 // If it's been set to nil then assume someone else has closed it. 48 if ctx.Repo.GitRepo != nil { 49 ctx.Repo.GitRepo.Close() 50 } 51 } 52 53 return cancel 54 } 55 56 func loadRepository(ctx *gitea_context.PrivateContext, ownerName, repoName string) *repo_model.Repository { 57 repo, err := repo_model.GetRepositoryByOwnerAndName(ctx, ownerName, repoName) 58 if err != nil { 59 log.Error("Failed to get repository: %s/%s Error: %v", ownerName, repoName, err) 60 ctx.JSON(http.StatusInternalServerError, private.Response{ 61 Err: fmt.Sprintf("Failed to get repository: %s/%s Error: %v", ownerName, repoName, err), 62 }) 63 return nil 64 } 65 if repo.OwnerName == "" { 66 repo.OwnerName = ownerName 67 } 68 return repo 69 }