diff options
author | Unknwon <u@gogs.io> | 2016-07-30 23:39:58 +0800 |
---|---|---|
committer | Unknwon <u@gogs.io> | 2016-07-30 23:39:58 +0800 |
commit | 10dc33064002f44098668dbd68163aabed6658d3 (patch) | |
tree | acac8b364019e8ec52c42f45ec151bb08d68a11a | |
parent | dfab54d5a2739b3b2a1fe45481c2269d1aeec1a9 (diff) | |
download | gitea-10dc33064002f44098668dbd68163aabed6658d3.tar.gz gitea-10dc33064002f44098668dbd68163aabed6658d3.zip |
#3345 dump content directly to HTTP ResponseWriter
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | gogs.go | 2 | ||||
-rw-r--r-- | models/git_diff.go | 36 | ||||
-rw-r--r-- | routers/repo/commit.go | 11 | ||||
-rw-r--r-- | templates/.VERSION | 2 |
5 files changed, 31 insertions, 22 deletions
@@ -3,7 +3,7 @@ Gogs - Go Git Service [![Build Status](https://travis-ci.org/gogits/gogs.svg?bra ![](https://github.com/gogits/gogs/blob/master/public/img/gogs-large-resize.png?raw=true) -##### Current tip version: 0.9.58 (see [Releases](https://github.com/gogits/gogs/releases) for binary versions) +##### Current tip version: 0.9.59 (see [Releases](https://github.com/gogits/gogs/releases) for binary versions) | Web | UI | Preview | |:-------------:|:-------:|:-------:| @@ -17,7 +17,7 @@ import ( "github.com/gogits/gogs/modules/setting" ) -const APP_VER = "0.9.58.0726" +const APP_VER = "0.9.59.0730" func init() { runtime.GOMAXPROCS(runtime.NumCPU()) diff --git a/models/git_diff.go b/models/git_diff.go index 9cec5f62b6..a3040081b0 100644 --- a/models/git_diff.go +++ b/models/git_diff.go @@ -185,6 +185,7 @@ func (diff *Diff) NumFiles() int { const DIFF_HEAD = "diff --git " +// TODO: move this function to gogits/git-module func ParsePatch(maxLines, maxLineCharacteres, maxFiles int, reader io.Reader) (*Diff, error) { var ( diff = &Diff{Files: make([]*DiffFile, 0)} @@ -371,13 +372,13 @@ func ParsePatch(maxLines, maxLineCharacteres, maxFiles int, reader io.Reader) (* return diff, nil } -func GetDiffRange(repoPath, beforeCommitID string, afterCommitID string, maxLines, maxLineCharacteres, maxFiles int) (*Diff, error) { - repo, err := git.OpenRepository(repoPath) +func GetDiffRange(repoPath, beforeCommitID, afterCommitID string, maxLines, maxLineCharacteres, maxFiles int) (*Diff, error) { + gitRepo, err := git.OpenRepository(repoPath) if err != nil { return nil, err } - commit, err := repo.GetCommit(afterCommitID) + commit, err := gitRepo.GetCommit(afterCommitID) if err != nil { return nil, err } @@ -422,27 +423,36 @@ func GetDiffRange(repoPath, beforeCommitID string, afterCommitID string, maxLine return diff, nil } -func GetRawDiff(repoPath, commitID, diffType string) (string, error) { +type RawDiffType string + +const ( + RAW_DIFF_NORMAL RawDiffType = "diff" + RAW_DIFF_PATCH RawDiffType = "patch" +) + +// GetRawDiff dumps diff results of repository in given commit ID to io.Writer. +// TODO: move this function to gogits/git-module +func GetRawDiff(repoPath, commitID string, diffType RawDiffType, writer io.Writer) error { repo, err := git.OpenRepository(repoPath) if err != nil { - return "", err + return fmt.Errorf("OpenRepository: %v", err) } commit, err := repo.GetCommit(commitID) if err != nil { - return "", err + return fmt.Errorf("GetCommit: %v", err) } var cmd *exec.Cmd switch diffType { - case "diff": + case RAW_DIFF_NORMAL: if commit.ParentCount() == 0 { cmd = exec.Command("git", "show", commitID) } else { c, _ := commit.Parent(0) cmd = exec.Command("git", "diff", "-M", c.ID.String(), commitID) } - case "patch": + case RAW_DIFF_PATCH: if commit.ParentCount() == 0 { cmd = exec.Command("git", "format-patch", "--no-signature", "--stdout", "--root", commitID) } else { @@ -451,19 +461,19 @@ func GetRawDiff(repoPath, commitID, diffType string) (string, error) { cmd = exec.Command("git", "format-patch", "--no-signature", "--stdout", query) } default: - return "", fmt.Errorf("Invalid diffType '%s'", diffType) + return fmt.Errorf("invalid diffType: %s", diffType) } stderr := new(bytes.Buffer) cmd.Dir = repoPath + cmd.Stdout = writer cmd.Stderr = stderr - stdout, err := cmd.Output() - if err != nil { - return "", fmt.Errorf("%v - %s", err, stderr) + if err = cmd.Run(); err != nil { + return fmt.Errorf("Run: %v - %s", err, stderr) } - return string(stdout), nil + return nil } func GetDiffCommit(repoPath, commitID string, maxLines, maxLineCharacteres, maxFiles int) (*Diff, error) { diff --git a/routers/repo/commit.go b/routers/repo/commit.go index 779fd644d3..4eb37e6bdb 100644 --- a/routers/repo/commit.go +++ b/routers/repo/commit.go @@ -195,16 +195,15 @@ func Diff(ctx *context.Context) { } func RawDiff(ctx *context.Context) { - diff, err := models.GetRawDiff( + if err := models.GetRawDiff( models.RepoPath(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name), ctx.Params(":sha"), - ctx.Params(":ext"), - ) - if err != nil { - ctx.Handle(404, "GetRawDiff", err) + models.RawDiffType(ctx.Params(":ext")), + ctx.Resp, + ); err != nil { + ctx.Handle(500, "GetRawDiff", err) return } - ctx.HandleText(200, diff) } func CompareDiff(ctx *context.Context) { diff --git a/templates/.VERSION b/templates/.VERSION index ec98469da0..77ce288650 100644 --- a/templates/.VERSION +++ b/templates/.VERSION @@ -1 +1 @@ -0.9.58.0726
\ No newline at end of file +0.9.59.0730
\ No newline at end of file |