@@ -357,6 +357,73 @@ func setMergeTarget(ctx *context.Context, pull *issues_model.PullRequest) {
357
357
ctx .Data ["BaseBranchLink" ] = pull .GetBaseBranchLink ()
358
358
}
359
359
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
+
360
427
// PrepareMergedViewPullInfo show meta information for a merged pull request view page
361
428
func PrepareMergedViewPullInfo (ctx * context.Context , issue * issues_model.Issue ) * git.CompareInfo {
362
429
pull := issue .PullRequest
0 commit comments