1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- // Copyright 2021 The Gitea Authors. All rights reserved.
- // SPDX-License-Identifier: MIT
-
- // Package private includes all internal routes. The package name internal is ideal but Golang is not allowed, so we use private as package name instead.
- package private
-
- import (
- "context"
- "fmt"
- "net/http"
-
- repo_model "code.gitea.io/gitea/models/repo"
- gitea_context "code.gitea.io/gitea/modules/context"
- "code.gitea.io/gitea/modules/git"
- "code.gitea.io/gitea/modules/log"
- )
-
- // __________
- // \______ \ ____ ______ ____
- // | _// __ \\____ \ / _ \
- // | | \ ___/| |_> > <_> )
- // |____|_ /\___ > __/ \____/
- // \/ \/|__|
- // _____ .__ __
- // / _ \ ______ _____|__| ____ ____ _____ ____ _____/ |_
- // / /_\ \ / ___// ___/ |/ ___\ / \ / \_/ __ \ / \ __\
- // / | \\___ \ \___ \| / /_/ > | \ Y Y \ ___/| | \ |
- // \____|__ /____ >____ >__\___ /|___| /__|_| /\___ >___| /__|
- // \/ \/ \/ /_____/ \/ \/ \/ \/
-
- // This file contains common functions relating to setting the Repository for the
- // internal routes
-
- // RepoAssignment assigns the repository and gitrepository to the private context
- func RepoAssignment(ctx *gitea_context.PrivateContext) context.CancelFunc {
- ownerName := ctx.Params(":owner")
- repoName := ctx.Params(":repo")
-
- repo := loadRepository(ctx, ownerName, repoName)
- if ctx.Written() {
- // Error handled in loadRepository
- return nil
- }
-
- gitRepo, err := git.OpenRepository(ctx, repo.RepoPath())
- if err != nil {
- log.Error("Failed to open repository: %s/%s Error: %v", ownerName, repoName, err)
- ctx.JSON(http.StatusInternalServerError, map[string]interface{}{
- "Err": fmt.Sprintf("Failed to open repository: %s/%s Error: %v", ownerName, repoName, err),
- })
- return nil
- }
-
- ctx.Repo = &gitea_context.Repository{
- Repository: repo,
- GitRepo: gitRepo,
- }
-
- // We opened it, we should close it
- cancel := func() {
- // If it's been set to nil then assume someone else has closed it.
- if ctx.Repo.GitRepo != nil {
- ctx.Repo.GitRepo.Close()
- }
- }
-
- return cancel
- }
-
- func loadRepository(ctx *gitea_context.PrivateContext, ownerName, repoName string) *repo_model.Repository {
- repo, err := repo_model.GetRepositoryByOwnerAndName(ctx, ownerName, repoName)
- if err != nil {
- log.Error("Failed to get repository: %s/%s Error: %v", ownerName, repoName, err)
- ctx.JSON(http.StatusInternalServerError, map[string]interface{}{
- "Err": fmt.Sprintf("Failed to get repository: %s/%s Error: %v", ownerName, repoName, err),
- })
- return nil
- }
- if repo.OwnerName == "" {
- repo.OwnerName = ownerName
- }
- return repo
- }
|