mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 20:36:07 +01: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["CommitStatuses"] = statuses
 | 
			
		||||
 | 
			
		||||
	diff, err := gitdiff.GetDiffCommit(repoPath,
 | 
			
		||||
	diff, err := gitdiff.GetDiffCommitWithWhitespaceBehavior(repoPath,
 | 
			
		||||
		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 {
 | 
			
		||||
		ctx.NotFound("GetDiffCommit", err)
 | 
			
		||||
		ctx.NotFound("GetDiffCommitWithWhitespaceBehavior", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -411,7 +411,8 @@ func PrepareCompareDiff(
 | 
			
		||||
	headRepo *models.Repository,
 | 
			
		||||
	headGitRepo *git.Repository,
 | 
			
		||||
	compareInfo *git.CompareInfo,
 | 
			
		||||
	baseBranch, headBranch string) bool {
 | 
			
		||||
	baseBranch, headBranch string,
 | 
			
		||||
	whitespaceBehavior string) bool {
 | 
			
		||||
 | 
			
		||||
	var (
 | 
			
		||||
		repo  = ctx.Repo.Repository
 | 
			
		||||
@@ -442,11 +443,11 @@ func PrepareCompareDiff(
 | 
			
		||||
		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,
 | 
			
		||||
		setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles)
 | 
			
		||||
		setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, whitespaceBehavior)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		ctx.ServerError("GetDiffRange", err)
 | 
			
		||||
		ctx.ServerError("GetDiffRangeWithWhitespaceBehavior", err)
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	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
 | 
			
		||||
func CompareDiff(ctx *context.Context) {
 | 
			
		||||
	headUser, headRepo, headGitRepo, compareInfo, baseBranch, headBranch := ParseCompareInfo(ctx)
 | 
			
		||||
 | 
			
		||||
	if ctx.Written() {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	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() {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -581,12 +581,6 @@ func ViewPullFiles(ctx *context.Context) {
 | 
			
		||||
	}
 | 
			
		||||
	pull := issue.PullRequest
 | 
			
		||||
 | 
			
		||||
	whitespaceFlags := map[string]string{
 | 
			
		||||
		"ignore-all":    "-w",
 | 
			
		||||
		"ignore-change": "-b",
 | 
			
		||||
		"ignore-eol":    "--ignore-space-at-eol",
 | 
			
		||||
		"":              ""}
 | 
			
		||||
 | 
			
		||||
	var (
 | 
			
		||||
		diffRepoPath  string
 | 
			
		||||
		startCommitID string
 | 
			
		||||
@@ -629,7 +623,7 @@ func ViewPullFiles(ctx *context.Context) {
 | 
			
		||||
	diff, err := gitdiff.GetDiffRangeWithWhitespaceBehavior(diffRepoPath,
 | 
			
		||||
		startCommitID, endCommitID, setting.Git.MaxGitDiffLines,
 | 
			
		||||
		setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles,
 | 
			
		||||
		whitespaceFlags[ctx.Data["WhitespaceBehavior"].(string)])
 | 
			
		||||
		gitdiff.GetWhitespaceFlag(ctx.Data["WhitespaceBehavior"].(string)))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		ctx.ServerError("GetDiffRangeWithWhitespaceBehavior", err)
 | 
			
		||||
		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
 | 
			
		||||
		// 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() {
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
@@ -1003,7 +998,8 @@ func CompareAndPullRequestPost(ctx *context.Context) {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	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() {
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -695,8 +695,8 @@ func RegisterRoutes(m *web.Route) {
 | 
			
		||||
			m.Get("/{id}", repo.MilestoneIssuesAndPulls)
 | 
			
		||||
		}, reqRepoIssuesOrPullsReader, context.RepoRef())
 | 
			
		||||
		m.Combo("/compare/*", repo.MustBeNotEmpty, reqRepoCodeReader, repo.SetEditorconfigIfExists).
 | 
			
		||||
			Get(ignSignIn, repo.SetDiffViewStyle, repo.CompareDiff).
 | 
			
		||||
			Post(reqSignIn, context.RepoMustNotBeArchived(), reqRepoPullsReader, repo.MustAllowPulls, bindIgnErr(auth.CreateIssueForm{}), repo.CompareAndPullRequestPost)
 | 
			
		||||
			Get(ignSignIn, repo.SetDiffViewStyle, repo.SetWhitespaceBehavior, repo.CompareDiff).
 | 
			
		||||
			Post(reqSignIn, context.RepoMustNotBeArchived(), reqRepoPullsReader, repo.MustAllowPulls, bindIgnErr(auth.CreateIssueForm{}), repo.SetWhitespaceBehavior, repo.CompareAndPullRequestPost)
 | 
			
		||||
	}, context.RepoAssignment(), context.UnitTypes())
 | 
			
		||||
 | 
			
		||||
	// Grouping for those endpoints that do require authentication
 | 
			
		||||
@@ -885,7 +885,7 @@ func RegisterRoutes(m *web.Route) {
 | 
			
		||||
			m.Get("/{page}", repo.Wiki)
 | 
			
		||||
			m.Get("/_pages", repo.WikiPages)
 | 
			
		||||
			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.Group("", func() {
 | 
			
		||||
@@ -977,7 +977,7 @@ func RegisterRoutes(m *web.Route) {
 | 
			
		||||
 | 
			
		||||
		m.Group("", func() {
 | 
			
		||||
			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)
 | 
			
		||||
 | 
			
		||||
		m.Group("/src", func() {
 | 
			
		||||
 
 | 
			
		||||
@@ -967,7 +967,13 @@ func GetDiffRangeWithWhitespaceBehavior(repoPath, beforeCommitID, afterCommitID
 | 
			
		||||
 | 
			
		||||
// GetDiffCommit builds a Diff representing the given commitID.
 | 
			
		||||
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
 | 
			
		||||
@@ -995,3 +1001,14 @@ func CommentMustAsDiff(c *models.Comment) *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>
 | 
			
		||||
			<div class="ui right">
 | 
			
		||||
				{{if .PageIsPullFiles}}
 | 
			
		||||
				{{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" .}}
 | 
			
		||||
				{{if and .PageIsPullFiles $.SignedUserID (not .IsArchived)}}
 | 
			
		||||
					{{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}}
 | 
			
		||||
			</div>
 | 
			
		||||
			<div class="diff-detail-actions df ac">
 | 
			
		||||
				{{if .PageIsPullFiles}}
 | 
			
		||||
				{{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" .}}
 | 
			
		||||
				{{if and .PageIsPullFiles $.SignedUserID (not .IsArchived)}}
 | 
			
		||||
					{{template "repo/diff/new_review" .}}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user