mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	Repare and Improve GetDiffRangeWithWhitespaceBehavior (#16894)
* repare and improve GetDiffRangeWithWhitespaceBehavior * Context with Timeout
This commit is contained in:
		| @@ -20,6 +20,7 @@ import ( | ||||
| 	"regexp" | ||||
| 	"sort" | ||||
| 	"strings" | ||||
| 	"time" | ||||
|  | ||||
| 	"code.gitea.io/gitea/models" | ||||
| 	"code.gitea.io/gitea/modules/charset" | ||||
| @@ -1205,31 +1206,20 @@ func readFileName(rd *strings.Reader) (string, bool) { | ||||
| 	return name[2:], ambiguity | ||||
| } | ||||
|  | ||||
| // GetDiffRange builds a Diff between two commits of a repository. | ||||
| // passing the empty string as beforeCommitID returns a diff from the | ||||
| // parent commit. | ||||
| func GetDiffRange(repoPath, beforeCommitID, afterCommitID string, maxLines, maxLineCharacters, maxFiles int) (*Diff, error) { | ||||
| 	return GetDiffRangeWithWhitespaceBehavior(repoPath, beforeCommitID, afterCommitID, maxLines, maxLineCharacters, maxFiles, "") | ||||
| } | ||||
|  | ||||
| // GetDiffRangeWithWhitespaceBehavior builds a Diff between two commits of a repository. | ||||
| // Passing the empty string as beforeCommitID returns a diff from the parent commit. | ||||
| // The whitespaceBehavior is either an empty string or a git flag | ||||
| func GetDiffRangeWithWhitespaceBehavior(repoPath, beforeCommitID, afterCommitID string, maxLines, maxLineCharacters, maxFiles int, whitespaceBehavior string) (*Diff, error) { | ||||
| 	gitRepo, err := git.OpenRepository(repoPath) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	defer gitRepo.Close() | ||||
| func GetDiffRangeWithWhitespaceBehavior(gitRepo *git.Repository, beforeCommitID, afterCommitID string, maxLines, maxLineCharacters, maxFiles int, whitespaceBehavior string) (*Diff, error) { | ||||
| 	repoPath := gitRepo.Path | ||||
|  | ||||
| 	commit, err := gitRepo.GetCommit(afterCommitID) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	// FIXME: graceful: These commands should likely have a timeout | ||||
| 	ctx, cancel := context.WithCancel(git.DefaultContext) | ||||
| 	ctx, cancel := context.WithTimeout(git.DefaultContext, time.Duration(setting.Git.Timeout.Default)*time.Second) | ||||
| 	defer cancel() | ||||
|  | ||||
| 	var cmd *exec.Cmd | ||||
| 	if (len(beforeCommitID) == 0 || beforeCommitID == git.EmptySHA) && commit.ParentCount() == 0 { | ||||
| 		diffArgs := []string{"diff", "--src-prefix=\\a/", "--dst-prefix=\\b/", "-M"} | ||||
| @@ -1303,15 +1293,10 @@ func GetDiffRangeWithWhitespaceBehavior(repoPath, beforeCommitID, afterCommitID | ||||
| 	return diff, nil | ||||
| } | ||||
|  | ||||
| // GetDiffCommit builds a Diff representing the given commitID. | ||||
| func GetDiffCommit(repoPath, commitID string, maxLines, maxLineCharacters, maxFiles int) (*Diff, error) { | ||||
| 	return GetDiffRangeWithWhitespaceBehavior(repoPath, "", commitID, maxLines, maxLineCharacters, maxFiles, "") | ||||
| } | ||||
|  | ||||
| // GetDiffCommitWithWhitespaceBehavior builds a Diff representing the given commitID. | ||||
| // The whitespaceBehavior is either an empty string or a git flag | ||||
| func GetDiffCommitWithWhitespaceBehavior(repoPath, commitID string, maxLines, maxLineCharacters, maxFiles int, whitespaceBehavior string) (*Diff, error) { | ||||
| 	return GetDiffRangeWithWhitespaceBehavior(repoPath, "", commitID, maxLines, maxLineCharacters, maxFiles, whitespaceBehavior) | ||||
| func GetDiffCommitWithWhitespaceBehavior(gitRepo *git.Repository, commitID string, maxLines, maxLineCharacters, maxFiles int, whitespaceBehavior string) (*Diff, error) { | ||||
| 	return GetDiffRangeWithWhitespaceBehavior(gitRepo, "", commitID, maxLines, maxLineCharacters, maxFiles, whitespaceBehavior) | ||||
| } | ||||
|  | ||||
| // CommentAsDiff returns c.Patch as *Diff | ||||
|   | ||||
| @@ -13,6 +13,7 @@ import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"code.gitea.io/gitea/models" | ||||
| 	"code.gitea.io/gitea/modules/git" | ||||
| 	"code.gitea.io/gitea/modules/highlight" | ||||
| 	"code.gitea.io/gitea/modules/json" | ||||
| 	"code.gitea.io/gitea/modules/setting" | ||||
| @@ -514,8 +515,13 @@ func TestDiffLine_GetCommentSide(t *testing.T) { | ||||
| } | ||||
|  | ||||
| func TestGetDiffRangeWithWhitespaceBehavior(t *testing.T) { | ||||
| 	gitRepo, err := git.OpenRepository("./testdata/academic-module") | ||||
| 	if !assert.NoError(t, err) { | ||||
| 		return | ||||
| 	} | ||||
| 	defer gitRepo.Close() | ||||
| 	for _, behavior := range []string{"-w", "--ignore-space-at-eol", "-b", ""} { | ||||
| 		diffs, err := GetDiffRangeWithWhitespaceBehavior("./testdata/academic-module", "559c156f8e0178b71cb44355428f24001b08fc68", "bd7063cc7c04689c4d082183d32a604ed27a24f9", | ||||
| 		diffs, err := GetDiffRangeWithWhitespaceBehavior(gitRepo, "559c156f8e0178b71cb44355428f24001b08fc68", "bd7063cc7c04689c4d082183d32a604ed27a24f9", | ||||
| 			setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffFiles, behavior) | ||||
| 		assert.NoError(t, err, fmt.Sprintf("Error when diff with %s", behavior)) | ||||
| 		for _, f := range diffs.Files { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user