@@ -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
361428func PrepareMergedViewPullInfo (ctx * context.Context , issue * issues_model.Issue ) * git.CompareInfo {
362429 pull := issue .PullRequest
0 commit comments