mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	#3345 dump content directly to HTTP ResponseWriter
This commit is contained in:
		| @@ -3,7 +3,7 @@ Gogs - Go Git Service [ |  | ||||||
|  |  | ||||||
| ##### 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  | | | Web | UI  | Preview  | | ||||||
| |:-------------:|:-------:|:-------:| | |:-------------:|:-------:|:-------:| | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							| @@ -17,7 +17,7 @@ import ( | |||||||
| 	"github.com/gogits/gogs/modules/setting" | 	"github.com/gogits/gogs/modules/setting" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| const APP_VER = "0.9.58.0726" | const APP_VER = "0.9.59.0730" | ||||||
|  |  | ||||||
| func init() { | func init() { | ||||||
| 	runtime.GOMAXPROCS(runtime.NumCPU()) | 	runtime.GOMAXPROCS(runtime.NumCPU()) | ||||||
|   | |||||||
| @@ -185,6 +185,7 @@ func (diff *Diff) NumFiles() int { | |||||||
|  |  | ||||||
| const DIFF_HEAD = "diff --git " | const DIFF_HEAD = "diff --git " | ||||||
|  |  | ||||||
|  | // TODO: move this function to gogits/git-module | ||||||
| func ParsePatch(maxLines, maxLineCharacteres, maxFiles int, reader io.Reader) (*Diff, error) { | func ParsePatch(maxLines, maxLineCharacteres, maxFiles int, reader io.Reader) (*Diff, error) { | ||||||
| 	var ( | 	var ( | ||||||
| 		diff = &Diff{Files: make([]*DiffFile, 0)} | 		diff = &Diff{Files: make([]*DiffFile, 0)} | ||||||
| @@ -371,13 +372,13 @@ func ParsePatch(maxLines, maxLineCharacteres, maxFiles int, reader io.Reader) (* | |||||||
| 	return diff, nil | 	return diff, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func GetDiffRange(repoPath, beforeCommitID string, afterCommitID string, maxLines, maxLineCharacteres, maxFiles int) (*Diff, error) { | func GetDiffRange(repoPath, beforeCommitID, afterCommitID string, maxLines, maxLineCharacteres, maxFiles int) (*Diff, error) { | ||||||
| 	repo, err := git.OpenRepository(repoPath) | 	gitRepo, err := git.OpenRepository(repoPath) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	commit, err := repo.GetCommit(afterCommitID) | 	commit, err := gitRepo.GetCommit(afterCommitID) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| @@ -422,27 +423,36 @@ func GetDiffRange(repoPath, beforeCommitID string, afterCommitID string, maxLine | |||||||
| 	return diff, nil | 	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) | 	repo, err := git.OpenRepository(repoPath) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return "", err | 		return fmt.Errorf("OpenRepository: %v", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	commit, err := repo.GetCommit(commitID) | 	commit, err := repo.GetCommit(commitID) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return "", err | 		return fmt.Errorf("GetCommit: %v", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	var cmd *exec.Cmd | 	var cmd *exec.Cmd | ||||||
| 	switch diffType { | 	switch diffType { | ||||||
| 	case "diff": | 	case RAW_DIFF_NORMAL: | ||||||
| 		if commit.ParentCount() == 0 { | 		if commit.ParentCount() == 0 { | ||||||
| 			cmd = exec.Command("git", "show", commitID) | 			cmd = exec.Command("git", "show", commitID) | ||||||
| 		} else { | 		} else { | ||||||
| 			c, _ := commit.Parent(0) | 			c, _ := commit.Parent(0) | ||||||
| 			cmd = exec.Command("git", "diff", "-M", c.ID.String(), commitID) | 			cmd = exec.Command("git", "diff", "-M", c.ID.String(), commitID) | ||||||
| 		} | 		} | ||||||
| 	case "patch": | 	case RAW_DIFF_PATCH: | ||||||
| 		if commit.ParentCount() == 0 { | 		if commit.ParentCount() == 0 { | ||||||
| 			cmd = exec.Command("git", "format-patch", "--no-signature", "--stdout", "--root", commitID) | 			cmd = exec.Command("git", "format-patch", "--no-signature", "--stdout", "--root", commitID) | ||||||
| 		} else { | 		} else { | ||||||
| @@ -451,19 +461,19 @@ func GetRawDiff(repoPath, commitID, diffType string) (string, error) { | |||||||
| 			cmd = exec.Command("git", "format-patch", "--no-signature", "--stdout", query) | 			cmd = exec.Command("git", "format-patch", "--no-signature", "--stdout", query) | ||||||
| 		} | 		} | ||||||
| 	default: | 	default: | ||||||
| 		return "", fmt.Errorf("Invalid diffType '%s'", diffType) | 		return fmt.Errorf("invalid diffType: %s", diffType) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	stderr := new(bytes.Buffer) | 	stderr := new(bytes.Buffer) | ||||||
|  |  | ||||||
| 	cmd.Dir = repoPath | 	cmd.Dir = repoPath | ||||||
|  | 	cmd.Stdout = writer | ||||||
| 	cmd.Stderr = stderr | 	cmd.Stderr = stderr | ||||||
|  |  | ||||||
| 	stdout, err := cmd.Output() | 	if err = cmd.Run(); err != nil { | ||||||
| 	if err != nil { | 		return fmt.Errorf("Run: %v - %s", err, stderr) | ||||||
| 		return "", fmt.Errorf("%v - %s", err, stderr) |  | ||||||
| 	} | 	} | ||||||
| 	return string(stdout), nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func GetDiffCommit(repoPath, commitID string, maxLines, maxLineCharacteres, maxFiles int) (*Diff, error) { | func GetDiffCommit(repoPath, commitID string, maxLines, maxLineCharacteres, maxFiles int) (*Diff, error) { | ||||||
|   | |||||||
| @@ -195,16 +195,15 @@ func Diff(ctx *context.Context) { | |||||||
| } | } | ||||||
|  |  | ||||||
| func RawDiff(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), | 		models.RepoPath(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name), | ||||||
| 		ctx.Params(":sha"), | 		ctx.Params(":sha"), | ||||||
| 		ctx.Params(":ext"), | 		models.RawDiffType(ctx.Params(":ext")), | ||||||
| 	) | 		ctx.Resp, | ||||||
| 	if err != nil { | 	); err != nil { | ||||||
| 		ctx.Handle(404, "GetRawDiff", err) | 		ctx.Handle(500, "GetRawDiff", err) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	ctx.HandleText(200, diff) |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func CompareDiff(ctx *context.Context) { | func CompareDiff(ctx *context.Context) { | ||||||
|   | |||||||
| @@ -1 +1 @@ | |||||||
| 0.9.58.0726 | 0.9.59.0730 | ||||||
		Reference in New Issue
	
	Block a user