as per https://github.com/go-gitea/gitea/pull/19449#issuecomment-1105283931 pass gitRepo down to GetRawDiff, since its used for main repo and wikitags/v1.18.0-dev
@@ -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) |
@@ -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) |
@@ -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 |
@@ -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, |