From 1ebb30e41bf3b44404d7d03a5541729762c226b5 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 25 Apr 2022 20:45:18 +0200 Subject: [PATCH] Pass gitRepo down to GetRawDiff, since its used for main repo and wiki (#19461) as per https://github.com/go-gitea/gitea/pull/19449#issuecomment-1105283931 pass gitRepo down to GetRawDiff, since its used for main repo and wiki --- modules/git/diff.go | 15 ++------------- routers/api/v1/repo/commits.go | 16 +++++----------- routers/web/repo/cherry_pick.go | 2 +- routers/web/repo/commit.go | 21 +++++++++++++++------ 4 files changed, 23 insertions(+), 31 deletions(-) diff --git a/modules/git/diff.go b/modules/git/diff.go index e11f63cab..c9d68bb13 100644 --- a/modules/git/diff.go +++ b/modules/git/diff.go @@ -28,8 +28,8 @@ const ( ) // GetRawDiff dumps diff results of repository in given commit ID to io.Writer. -func GetRawDiff(ctx context.Context, repoPath, commitID string, diffType RawDiffType, writer io.Writer) error { - return GetRawDiffForFile(ctx, repoPath, "", commitID, diffType, "", writer) +func GetRawDiff(repo *Repository, commitID string, diffType RawDiffType, writer io.Writer) error { + return GetRepoRawDiffForFile(repo, "", commitID, diffType, "", writer) } // GetReverseRawDiff dumps the reverse diff results of repository in given commit ID to io.Writer. @@ -46,17 +46,6 @@ func GetReverseRawDiff(ctx context.Context, repoPath, commitID string, writer io return nil } -// GetRawDiffForFile dumps diff results of file in given commit ID to io.Writer. -func GetRawDiffForFile(ctx context.Context, repoPath, startCommit, endCommit string, diffType RawDiffType, file string, writer io.Writer) error { - repo, closer, err := RepositoryFromContextOrOpen(ctx, repoPath) - if err != nil { - return fmt.Errorf("RepositoryFromContextOrOpen: %v", err) - } - defer closer.Close() - - return GetRepoRawDiffForFile(repo, startCommit, endCommit, diffType, file, writer) -} - // GetRepoRawDiffForFile dumps diff results of file in given commit ID to io.Writer according given repository func GetRepoRawDiffForFile(repo *Repository, startCommit, endCommit string, diffType RawDiffType, file string, writer io.Writer) error { commit, err := repo.GetCommit(endCommit) diff --git a/routers/api/v1/repo/commits.go b/routers/api/v1/repo/commits.go index c79c34ec4..b196ce977 100644 --- a/routers/api/v1/repo/commits.go +++ b/routers/api/v1/repo/commits.go @@ -11,7 +11,6 @@ import ( "net/http" "strconv" - repo_model "code.gitea.io/gitea/models/repo" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/convert" @@ -268,17 +267,12 @@ func DownloadCommitDiffOrPatch(ctx *context.APIContext) { // "$ref": "#/responses/string" // "404": // "$ref": "#/responses/notFound" - repoPath := repo_model.RepoPath(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name) - // TODO: use gitRepo from context - if err := git.GetRawDiff( - ctx, - repoPath, - ctx.Params(":sha"), - git.RawDiffType(ctx.Params(":diffType")), - ctx.Resp, - ); err != nil { + sha := ctx.Params(":sha") + diffType := git.RawDiffType(ctx.Params(":diffType")) + + if err := git.GetRawDiff(ctx.Repo.GitRepo, sha, diffType, ctx.Resp); err != nil { if git.IsErrNotExist(err) { - ctx.NotFound(ctx.Params(":sha")) + ctx.NotFound(sha) return } ctx.Error(http.StatusInternalServerError, "DownloadCommitDiffOrPatch", err) diff --git a/routers/web/repo/cherry_pick.go b/routers/web/repo/cherry_pick.go index 926361ccd..6667d2741 100644 --- a/routers/web/repo/cherry_pick.go +++ b/routers/web/repo/cherry_pick.go @@ -151,7 +151,7 @@ func CherryPickPost(ctx *context.Context) { return } } else { - if err := git.GetRawDiff(ctx, ctx.Repo.Repository.RepoPath(), sha, git.RawDiffType("patch"), buf); err != nil { + if err := git.GetRawDiff(ctx.Repo.GitRepo, sha, git.RawDiffType("patch"), buf); err != nil { if git.IsErrNotExist(err) { ctx.NotFound("GetRawDiff", errors.New("commit "+ctx.Params(":sha")+" does not exist.")) return diff --git a/routers/web/repo/commit.go b/routers/web/repo/commit.go index 2b1b5440d..59d818672 100644 --- a/routers/web/repo/commit.go +++ b/routers/web/repo/commit.go @@ -7,13 +7,13 @@ package repo import ( "errors" + "fmt" "net/http" "strings" "code.gitea.io/gitea/models" asymkey_model "code.gitea.io/gitea/models/asymkey" "code.gitea.io/gitea/models/db" - repo_model "code.gitea.io/gitea/models/repo" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/charset" @@ -381,15 +381,24 @@ func Diff(ctx *context.Context) { // RawDiff dumps diff results of repository in given commit ID to io.Writer func RawDiff(ctx *context.Context) { - var repoPath string + var gitRepo *git.Repository if ctx.Data["PageIsWiki"] != nil { - repoPath = ctx.Repo.Repository.WikiPath() + wikiRepo, err := git.OpenRepository(ctx, ctx.Repo.Repository.WikiPath()) + if err != nil { + ctx.ServerError("OpenRepository", err) + return + } + defer wikiRepo.Close() + gitRepo = wikiRepo } else { - repoPath = repo_model.RepoPath(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name) + gitRepo = ctx.Repo.GitRepo + if gitRepo == nil { + ctx.ServerError("GitRepo not open", fmt.Errorf("no open git repo for '%s'", ctx.Repo.Repository.FullName())) + return + } } if err := git.GetRawDiff( - ctx, - repoPath, + gitRepo, ctx.Params(":sha"), git.RawDiffType(ctx.Params(":ext")), ctx.Resp,