mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-26 12:27:06 +00:00 
			
		
		
		
	Whitespace in commits (#14650)
* Add whitespace to commit view * Add whitespace to /compare/a...b * Move repeated whitespaceFlags to gitdiff * Add whitespace for wiki pages
This commit is contained in:
		| @@ -304,11 +304,12 @@ func Diff(ctx *context.Context) { | |||||||
| 	ctx.Data["CommitStatus"] = models.CalcCommitStatus(statuses) | 	ctx.Data["CommitStatus"] = models.CalcCommitStatus(statuses) | ||||||
| 	ctx.Data["CommitStatuses"] = statuses | 	ctx.Data["CommitStatuses"] = statuses | ||||||
|  |  | ||||||
| 	diff, err := gitdiff.GetDiffCommit(repoPath, | 	diff, err := gitdiff.GetDiffCommitWithWhitespaceBehavior(repoPath, | ||||||
| 		commitID, setting.Git.MaxGitDiffLines, | 		commitID, setting.Git.MaxGitDiffLines, | ||||||
| 		setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles) | 		setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, | ||||||
|  | 		gitdiff.GetWhitespaceFlag(ctx.Data["WhitespaceBehavior"].(string))) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		ctx.NotFound("GetDiffCommit", err) | 		ctx.NotFound("GetDiffCommitWithWhitespaceBehavior", err) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -411,7 +411,8 @@ func PrepareCompareDiff( | |||||||
| 	headRepo *models.Repository, | 	headRepo *models.Repository, | ||||||
| 	headGitRepo *git.Repository, | 	headGitRepo *git.Repository, | ||||||
| 	compareInfo *git.CompareInfo, | 	compareInfo *git.CompareInfo, | ||||||
| 	baseBranch, headBranch string) bool { | 	baseBranch, headBranch string, | ||||||
|  | 	whitespaceBehavior string) bool { | ||||||
|  |  | ||||||
| 	var ( | 	var ( | ||||||
| 		repo  = ctx.Repo.Repository | 		repo  = ctx.Repo.Repository | ||||||
| @@ -442,11 +443,11 @@ func PrepareCompareDiff( | |||||||
| 		return true | 		return true | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	diff, err := gitdiff.GetDiffRange(models.RepoPath(headUser.Name, headRepo.Name), | 	diff, err := gitdiff.GetDiffRangeWithWhitespaceBehavior(models.RepoPath(headUser.Name, headRepo.Name), | ||||||
| 		compareInfo.MergeBase, headCommitID, setting.Git.MaxGitDiffLines, | 		compareInfo.MergeBase, headCommitID, setting.Git.MaxGitDiffLines, | ||||||
| 		setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles) | 		setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, whitespaceBehavior) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		ctx.ServerError("GetDiffRange", err) | 		ctx.ServerError("GetDiffRangeWithWhitespaceBehavior", err) | ||||||
| 		return false | 		return false | ||||||
| 	} | 	} | ||||||
| 	ctx.Data["Diff"] = diff | 	ctx.Data["Diff"] = diff | ||||||
| @@ -530,12 +531,14 @@ func getBranchesForRepo(user *models.User, repo *models.Repository) (bool, []str | |||||||
| // CompareDiff show different from one commit to another commit | // CompareDiff show different from one commit to another commit | ||||||
| func CompareDiff(ctx *context.Context) { | func CompareDiff(ctx *context.Context) { | ||||||
| 	headUser, headRepo, headGitRepo, compareInfo, baseBranch, headBranch := ParseCompareInfo(ctx) | 	headUser, headRepo, headGitRepo, compareInfo, baseBranch, headBranch := ParseCompareInfo(ctx) | ||||||
|  |  | ||||||
| 	if ctx.Written() { | 	if ctx.Written() { | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	defer headGitRepo.Close() | 	defer headGitRepo.Close() | ||||||
|  |  | ||||||
| 	nothingToCompare := PrepareCompareDiff(ctx, headUser, headRepo, headGitRepo, compareInfo, baseBranch, headBranch) | 	nothingToCompare := PrepareCompareDiff(ctx, headUser, headRepo, headGitRepo, compareInfo, baseBranch, headBranch, | ||||||
|  | 		gitdiff.GetWhitespaceFlag(ctx.Data["WhitespaceBehavior"].(string))) | ||||||
| 	if ctx.Written() { | 	if ctx.Written() { | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -581,12 +581,6 @@ func ViewPullFiles(ctx *context.Context) { | |||||||
| 	} | 	} | ||||||
| 	pull := issue.PullRequest | 	pull := issue.PullRequest | ||||||
|  |  | ||||||
| 	whitespaceFlags := map[string]string{ |  | ||||||
| 		"ignore-all":    "-w", |  | ||||||
| 		"ignore-change": "-b", |  | ||||||
| 		"ignore-eol":    "--ignore-space-at-eol", |  | ||||||
| 		"":              ""} |  | ||||||
|  |  | ||||||
| 	var ( | 	var ( | ||||||
| 		diffRepoPath  string | 		diffRepoPath  string | ||||||
| 		startCommitID string | 		startCommitID string | ||||||
| @@ -629,7 +623,7 @@ func ViewPullFiles(ctx *context.Context) { | |||||||
| 	diff, err := gitdiff.GetDiffRangeWithWhitespaceBehavior(diffRepoPath, | 	diff, err := gitdiff.GetDiffRangeWithWhitespaceBehavior(diffRepoPath, | ||||||
| 		startCommitID, endCommitID, setting.Git.MaxGitDiffLines, | 		startCommitID, endCommitID, setting.Git.MaxGitDiffLines, | ||||||
| 		setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, | 		setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, | ||||||
| 		whitespaceFlags[ctx.Data["WhitespaceBehavior"].(string)]) | 		gitdiff.GetWhitespaceFlag(ctx.Data["WhitespaceBehavior"].(string))) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		ctx.ServerError("GetDiffRangeWithWhitespaceBehavior", err) | 		ctx.ServerError("GetDiffRangeWithWhitespaceBehavior", err) | ||||||
| 		return | 		return | ||||||
| @@ -993,7 +987,8 @@ func CompareAndPullRequestPost(ctx *context.Context) { | |||||||
|  |  | ||||||
| 		// This stage is already stop creating new pull request, so it does not matter if it has | 		// This stage is already stop creating new pull request, so it does not matter if it has | ||||||
| 		// something to compare or not. | 		// something to compare or not. | ||||||
| 		PrepareCompareDiff(ctx, headUser, headRepo, headGitRepo, prInfo, baseBranch, headBranch) | 		PrepareCompareDiff(ctx, headUser, headRepo, headGitRepo, prInfo, baseBranch, headBranch, | ||||||
|  | 			gitdiff.GetWhitespaceFlag(ctx.Data["WhitespaceBehavior"].(string))) | ||||||
| 		if ctx.Written() { | 		if ctx.Written() { | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| @@ -1003,7 +998,8 @@ func CompareAndPullRequestPost(ctx *context.Context) { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if util.IsEmptyString(form.Title) { | 	if util.IsEmptyString(form.Title) { | ||||||
| 		PrepareCompareDiff(ctx, headUser, headRepo, headGitRepo, prInfo, baseBranch, headBranch) | 		PrepareCompareDiff(ctx, headUser, headRepo, headGitRepo, prInfo, baseBranch, headBranch, | ||||||
|  | 			gitdiff.GetWhitespaceFlag(ctx.Data["WhitespaceBehavior"].(string))) | ||||||
| 		if ctx.Written() { | 		if ctx.Written() { | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -695,8 +695,8 @@ func RegisterRoutes(m *web.Route) { | |||||||
| 			m.Get("/{id}", repo.MilestoneIssuesAndPulls) | 			m.Get("/{id}", repo.MilestoneIssuesAndPulls) | ||||||
| 		}, reqRepoIssuesOrPullsReader, context.RepoRef()) | 		}, reqRepoIssuesOrPullsReader, context.RepoRef()) | ||||||
| 		m.Combo("/compare/*", repo.MustBeNotEmpty, reqRepoCodeReader, repo.SetEditorconfigIfExists). | 		m.Combo("/compare/*", repo.MustBeNotEmpty, reqRepoCodeReader, repo.SetEditorconfigIfExists). | ||||||
| 			Get(ignSignIn, repo.SetDiffViewStyle, repo.CompareDiff). | 			Get(ignSignIn, repo.SetDiffViewStyle, repo.SetWhitespaceBehavior, repo.CompareDiff). | ||||||
| 			Post(reqSignIn, context.RepoMustNotBeArchived(), reqRepoPullsReader, repo.MustAllowPulls, bindIgnErr(auth.CreateIssueForm{}), repo.CompareAndPullRequestPost) | 			Post(reqSignIn, context.RepoMustNotBeArchived(), reqRepoPullsReader, repo.MustAllowPulls, bindIgnErr(auth.CreateIssueForm{}), repo.SetWhitespaceBehavior, repo.CompareAndPullRequestPost) | ||||||
| 	}, context.RepoAssignment(), context.UnitTypes()) | 	}, context.RepoAssignment(), context.UnitTypes()) | ||||||
|  |  | ||||||
| 	// Grouping for those endpoints that do require authentication | 	// Grouping for those endpoints that do require authentication | ||||||
| @@ -885,7 +885,7 @@ func RegisterRoutes(m *web.Route) { | |||||||
| 			m.Get("/{page}", repo.Wiki) | 			m.Get("/{page}", repo.Wiki) | ||||||
| 			m.Get("/_pages", repo.WikiPages) | 			m.Get("/_pages", repo.WikiPages) | ||||||
| 			m.Get("/{page}/_revision", repo.WikiRevision) | 			m.Get("/{page}/_revision", repo.WikiRevision) | ||||||
| 			m.Get("/commit/{sha:[a-f0-9]{7,40}}", repo.SetEditorconfigIfExists, repo.SetDiffViewStyle, repo.Diff) | 			m.Get("/commit/{sha:[a-f0-9]{7,40}}", repo.SetEditorconfigIfExists, repo.SetDiffViewStyle, repo.SetWhitespaceBehavior, repo.Diff) | ||||||
| 			m.Get("/commit/{sha:[a-f0-9]{7,40}}.{:patch|diff}", repo.RawDiff) | 			m.Get("/commit/{sha:[a-f0-9]{7,40}}.{:patch|diff}", repo.RawDiff) | ||||||
|  |  | ||||||
| 			m.Group("", func() { | 			m.Group("", func() { | ||||||
| @@ -977,7 +977,7 @@ func RegisterRoutes(m *web.Route) { | |||||||
|  |  | ||||||
| 		m.Group("", func() { | 		m.Group("", func() { | ||||||
| 			m.Get("/graph", repo.Graph) | 			m.Get("/graph", repo.Graph) | ||||||
| 			m.Get("/commit/{sha:([a-f0-9]{7,40})$}", repo.SetEditorconfigIfExists, repo.SetDiffViewStyle, repo.Diff) | 			m.Get("/commit/{sha:([a-f0-9]{7,40})$}", repo.SetEditorconfigIfExists, repo.SetDiffViewStyle, repo.SetWhitespaceBehavior, repo.Diff) | ||||||
| 		}, repo.MustBeNotEmpty, context.RepoRef(), reqRepoCodeReader) | 		}, repo.MustBeNotEmpty, context.RepoRef(), reqRepoCodeReader) | ||||||
|  |  | ||||||
| 		m.Group("/src", func() { | 		m.Group("/src", func() { | ||||||
|   | |||||||
| @@ -967,7 +967,13 @@ func GetDiffRangeWithWhitespaceBehavior(repoPath, beforeCommitID, afterCommitID | |||||||
|  |  | ||||||
| // GetDiffCommit builds a Diff representing the given commitID. | // GetDiffCommit builds a Diff representing the given commitID. | ||||||
| func GetDiffCommit(repoPath, commitID string, maxLines, maxLineCharacters, maxFiles int) (*Diff, error) { | func GetDiffCommit(repoPath, commitID string, maxLines, maxLineCharacters, maxFiles int) (*Diff, error) { | ||||||
| 	return GetDiffRange(repoPath, "", commitID, maxLines, maxLineCharacters, maxFiles) | 	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) | ||||||
| } | } | ||||||
|  |  | ||||||
| // CommentAsDiff returns c.Patch as *Diff | // CommentAsDiff returns c.Patch as *Diff | ||||||
| @@ -995,3 +1001,14 @@ func CommentMustAsDiff(c *models.Comment) *Diff { | |||||||
| 	} | 	} | ||||||
| 	return diff | 	return diff | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // GetWhitespaceFlag returns git diff flag for treating whitespaces | ||||||
|  | func GetWhitespaceFlag(whiteSpaceBehavior string) string { | ||||||
|  | 	whitespaceFlags := map[string]string{ | ||||||
|  | 		"ignore-all":    "-w", | ||||||
|  | 		"ignore-change": "-b", | ||||||
|  | 		"ignore-eol":    "--ignore-space-at-eol", | ||||||
|  | 		"":              ""} | ||||||
|  |  | ||||||
|  | 	return whitespaceFlags[whiteSpaceBehavior] | ||||||
|  | } | ||||||
|   | |||||||
| @@ -2,11 +2,7 @@ | |||||||
| 	<div class="diff-detail-box diff-box sticky"> | 	<div class="diff-detail-box diff-box sticky"> | ||||||
| 		<div> | 		<div> | ||||||
| 			<div class="ui right"> | 			<div class="ui right"> | ||||||
| 				{{if .PageIsPullFiles}} |  | ||||||
| 				{{template "repo/diff/whitespace_dropdown" .}} | 				{{template "repo/diff/whitespace_dropdown" .}} | ||||||
| 				{{else}} |  | ||||||
| 					<a class="ui tiny basic toggle button" href="?style={{if .IsSplitStyle}}unified{{else}}split{{end}}">{{ if .IsSplitStyle }}{{.i18n.Tr "repo.diff.show_unified_view"}}{{else}}{{.i18n.Tr "repo.diff.show_split_view"}}{{end}}</a> |  | ||||||
| 				{{end}} |  | ||||||
| 				{{template "repo/diff/options_dropdown" .}} | 				{{template "repo/diff/options_dropdown" .}} | ||||||
| 				{{if and .PageIsPullFiles $.SignedUserID (not .IsArchived)}} | 				{{if and .PageIsPullFiles $.SignedUserID (not .IsArchived)}} | ||||||
| 					{{template "repo/diff/new_review" .}} | 					{{template "repo/diff/new_review" .}} | ||||||
| @@ -22,11 +18,7 @@ | |||||||
| 				{{svg "octicon-diff" 16 "mr-2"}}{{.i18n.Tr "repo.diff.stats_desc" .Diff.NumFiles .Diff.TotalAddition .Diff.TotalDeletion | Str2html}} | 				{{svg "octicon-diff" 16 "mr-2"}}{{.i18n.Tr "repo.diff.stats_desc" .Diff.NumFiles .Diff.TotalAddition .Diff.TotalDeletion | Str2html}} | ||||||
| 			</div> | 			</div> | ||||||
| 			<div class="diff-detail-actions df ac"> | 			<div class="diff-detail-actions df ac"> | ||||||
| 				{{if .PageIsPullFiles}} |  | ||||||
| 				{{template "repo/diff/whitespace_dropdown" .}} | 				{{template "repo/diff/whitespace_dropdown" .}} | ||||||
| 				{{else}} |  | ||||||
| 					<a class="ui tiny basic toggle button" href="?style={{if .IsSplitStyle}}unified{{else}}split{{end}}">{{ if .IsSplitStyle }}{{.i18n.Tr "repo.diff.show_unified_view"}}{{else}}{{.i18n.Tr "repo.diff.show_split_view"}}{{end}}</a> |  | ||||||
| 				{{end}} |  | ||||||
| 				{{template "repo/diff/options_dropdown" .}} | 				{{template "repo/diff/options_dropdown" .}} | ||||||
| 				{{if and .PageIsPullFiles $.SignedUserID (not .IsArchived)}} | 				{{if and .PageIsPullFiles $.SignedUserID (not .IsArchived)}} | ||||||
| 					{{template "repo/diff/new_review" .}} | 					{{template "repo/diff/new_review" .}} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 vnkmpf
					vnkmpf