Skip to content

Commit 789f4f9

Browse files
committed
Diff stats in PR tab bar
1 parent 51c2aeb commit 789f4f9

File tree

3 files changed

+75
-1
lines changed

3 files changed

+75
-1
lines changed

routers/web/repo/pull.go

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,73 @@ func setMergeTarget(ctx *context.Context, pull *issues_model.PullRequest) {
357357
ctx.Data["BaseBranchLink"] = pull.GetBaseBranchLink()
358358
}
359359

360+
// GetPullDiffStats get Pull Requests diff stats
361+
func GetPullDiffStats(ctx *context.Context) {
362+
issue := checkPullInfo(ctx)
363+
pull := issue.PullRequest
364+
365+
var (
366+
startCommitID string
367+
endCommitID string
368+
gitRepo = ctx.Repo.GitRepo
369+
)
370+
371+
var prInfo *git.CompareInfo
372+
373+
if pull.HasMerged {
374+
prInfo = PrepareMergedViewPullInfo(ctx, issue)
375+
} else {
376+
prInfo = PrepareViewPullInfo(ctx, issue)
377+
}
378+
379+
if ctx.Written() {
380+
return
381+
} else if prInfo == nil {
382+
ctx.NotFound("PullFiles", nil)
383+
return
384+
}
385+
386+
headCommitID, err := gitRepo.GetRefCommitID(pull.GetGitRefName())
387+
if err != nil {
388+
ctx.ServerError("GetRefCommitID", err)
389+
return
390+
}
391+
392+
startCommitID = prInfo.MergeBase
393+
endCommitID = headCommitID
394+
395+
fileOnly := ctx.FormBool("file-only")
396+
397+
maxLines, maxFiles := setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffFiles
398+
files := ctx.FormStrings("files")
399+
fmt.Printf("=========>> files: %s\n", files)
400+
if fileOnly && (len(files) == 2 || len(files) == 1) {
401+
maxLines, maxFiles = -1, -1
402+
}
403+
diffOptions := &gitdiff.DiffOptions{
404+
BeforeCommitID: startCommitID,
405+
AfterCommitID: endCommitID,
406+
SkipTo: ctx.FormString("skip-to"),
407+
MaxLines: maxLines,
408+
MaxLineCharacters: setting.Git.MaxGitDiffLineCharacters,
409+
MaxFiles: maxFiles,
410+
WhitespaceBehavior: gitdiff.GetWhitespaceFlag(ctx.Data["WhitespaceBehavior"].(string)),
411+
}
412+
413+
var methodWithError string
414+
var diff *gitdiff.Diff
415+
416+
diff, err = gitdiff.GetDiff(gitRepo, diffOptions, files...)
417+
methodWithError = "GetDiff"
418+
419+
if err != nil {
420+
ctx.ServerError(methodWithError, err)
421+
return
422+
}
423+
424+
ctx.Data["Diff"] = diff
425+
}
426+
360427
// PrepareMergedViewPullInfo show meta information for a merged pull request view page
361428
func PrepareMergedViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git.CompareInfo {
362429
pull := issue.PullRequest

routers/web/web.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1263,9 +1263,10 @@ func registerRoutes(m *web.Route) {
12631263
})
12641264

12651265
m.Group("/pulls/{index}", func() {
1266+
m.Get("", repo.SetWhitespaceBehavior, repo.GetPullDiffStats, repo.ViewIssue)
12661267
m.Get(".diff", repo.DownloadPullDiff)
12671268
m.Get(".patch", repo.DownloadPullPatch)
1268-
m.Get("/commits", context.RepoRef(), repo.ViewPullCommits)
1269+
m.Get("/commits", context.RepoRef(), repo.SetWhitespaceBehavior, repo.GetPullDiffStats, repo.ViewPullCommits)
12691270
m.Post("/merge", context.RepoMustNotBeArchived(), web.Bind(forms.MergePullRequestForm{}), repo.MergePullRequest)
12701271
m.Post("/cancel_auto_merge", context.RepoMustNotBeArchived(), repo.CancelAutoMergePullRequest)
12711272
m.Post("/update", repo.UpdatePullRequest)

templates/repo/pulls/tab_menu.tmpl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,10 @@
1414
{{$.locale.Tr "repo.pulls.tab_files"}}
1515
<span class="ui small label">{{if .NumFiles}}{{.NumFiles}}{{else}}-{{end}}</span>
1616
</a>
17+
<span class="item">
18+
<span class="">{{if .Diff.TotalAddition}}+{{.Diff.TotalAddition}}{{else}}+0{{end}}</span>&nbsp;<span>{{if .Diff.TotalDeletion}}-{{.Diff.TotalDeletion}}{{else}}-0{{end}}</span>
19+
<span class="diff-stats-bar gt-mx-3">
20+
<div class="diff-stats-add-bar" style="width: 50%;"></div>
21+
</span>
22+
</span>
1723
</div>

0 commit comments

Comments
 (0)