@@ -253,40 +253,30 @@ func setMergeTarget(ctx *context.Context, pull *models.PullRequest) {
253
253
}
254
254
255
255
// PrepareMergedViewPullInfo show meta information for a merged pull request view page
256
- func PrepareMergedViewPullInfo (ctx * context.Context , issue * models.Issue ) {
256
+ func PrepareMergedViewPullInfo (ctx * context.Context , issue * models.Issue ) * git. PullRequestInfo {
257
257
pull := issue .PullRequest
258
258
259
- var err error
260
- if err = pull .GetHeadRepo (); err != nil {
261
- ctx .ServerError ("GetHeadRepo" , err )
262
- return
263
- }
264
-
265
259
setMergeTarget (ctx , pull )
266
260
ctx .Data ["HasMerged" ] = true
267
261
268
- mergedCommit , err := ctx .Repo .GitRepo .GetCommit (pull .MergedCommitID )
269
- if err != nil {
270
- ctx .ServerError ("GetCommit" , err )
271
- return
272
- }
273
- // the ID of the last commit in the PR (not including the merge commit)
274
- endCommitID , err := mergedCommit .ParentID (mergedCommit .ParentCount () - 1 )
275
- if err != nil {
276
- ctx .ServerError ("ParentID" , err )
277
- return
278
- }
262
+ prInfo , err := ctx .Repo .GitRepo .GetPullRequestInfo (ctx .Repo .Repository .RepoPath (),
263
+ pull .MergeBase , pull .GetGitRefName ())
279
264
280
- ctx .Data ["NumCommits" ], err = ctx .Repo .GitRepo .CommitsCountBetween (pull .MergeBase , endCommitID .String ())
281
- if err != nil {
282
- ctx .ServerError ("Repo.GitRepo.CommitsCountBetween" , err )
283
- return
284
- }
285
- ctx .Data ["NumFiles" ], err = ctx .Repo .GitRepo .FilesCountBetween (pull .MergeBase , endCommitID .String ())
286
265
if err != nil {
287
- ctx .ServerError ("Repo.GitRepo.FilesCountBetween" , err )
288
- return
266
+ if strings .Contains (err .Error (), "fatal: Not a valid object name" ) {
267
+ ctx .Data ["IsPullReuqestBroken" ] = true
268
+ ctx .Data ["BaseTarget" ] = "deleted"
269
+ ctx .Data ["NumCommits" ] = 0
270
+ ctx .Data ["NumFiles" ] = 0
271
+ return nil
272
+ }
273
+
274
+ ctx .ServerError ("GetPullRequestInfo" , err )
275
+ return nil
289
276
}
277
+ ctx .Data ["NumCommits" ] = prInfo .Commits .Len ()
278
+ ctx .Data ["NumFiles" ] = prInfo .NumFiles
279
+ return prInfo
290
280
}
291
281
292
282
// PrepareViewPullInfo show meta information for a pull request preview page
@@ -351,28 +341,16 @@ func ViewPullCommits(ctx *context.Context) {
351
341
352
342
var commits * list.List
353
343
if pull .HasMerged {
354
- PrepareMergedViewPullInfo (ctx , issue )
344
+ prInfo := PrepareMergedViewPullInfo (ctx , issue )
355
345
if ctx .Written () {
356
346
return
347
+ } else if prInfo == nil {
348
+ ctx .NotFound ("ViewPullCommits" , nil )
349
+ return
357
350
}
358
351
ctx .Data ["Username" ] = ctx .Repo .Owner .Name
359
352
ctx .Data ["Reponame" ] = ctx .Repo .Repository .Name
360
-
361
- mergedCommit , err := ctx .Repo .GitRepo .GetCommit (pull .MergedCommitID )
362
- if err != nil {
363
- ctx .ServerError ("Repo.GitRepo.GetCommit" , err )
364
- return
365
- }
366
- endCommitID , err := mergedCommit .ParentID (mergedCommit .ParentCount () - 1 )
367
- if err != nil {
368
- ctx .ServerError ("ParentID" , err )
369
- return
370
- }
371
- commits , err = ctx .Repo .GitRepo .CommitsBetweenIDs (endCommitID .String (), pull .MergeBase )
372
- if err != nil {
373
- ctx .ServerError ("Repo.GitRepo.CommitsBetweenIDs" , err )
374
- return
375
- }
353
+ commits = prInfo .Commits
376
354
} else {
377
355
prInfo := PrepareViewPullInfo (ctx , issue )
378
356
if ctx .Written () {
@@ -415,25 +393,25 @@ func ViewPullFiles(ctx *context.Context) {
415
393
416
394
var headTarget string
417
395
if pull .HasMerged {
418
- PrepareMergedViewPullInfo (ctx , issue )
396
+ prInfo := PrepareMergedViewPullInfo (ctx , issue )
419
397
if ctx .Written () {
420
398
return
399
+ } else if prInfo == nil {
400
+ ctx .NotFound ("ViewPullFiles" , nil )
401
+ return
421
402
}
422
403
423
404
diffRepoPath = ctx .Repo .GitRepo .Path
424
- startCommitID = pull .MergeBase
425
- mergedCommit , err := ctx .Repo .GitRepo .GetCommit (pull .MergedCommitID )
426
- if err != nil {
427
- ctx .ServerError ("GetCommit" , err )
428
- return
429
- }
430
- endCommitSha , err := mergedCommit .ParentID (mergedCommit .ParentCount () - 1 )
405
+ gitRepo = ctx .Repo .GitRepo
406
+
407
+ headCommitID , err := gitRepo .GetRefCommitID (pull .GetGitRefName ())
431
408
if err != nil {
432
- ctx .ServerError ("ParentID " , err )
409
+ ctx .ServerError ("GetRefCommitID " , err )
433
410
return
434
411
}
435
- endCommitID = endCommitSha .String ()
436
- gitRepo = ctx .Repo .GitRepo
412
+
413
+ startCommitID = prInfo .MergeBase
414
+ endCommitID = headCommitID
437
415
438
416
headTarget = path .Join (ctx .Repo .Owner .Name , ctx .Repo .Repository .Name )
439
417
ctx .Data ["Username" ] = ctx .Repo .Owner .Name
0 commit comments