From d07c955e2a6359937ecff458d450e328861da5e6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kim=20=22BKC=22=20Carlb=C3=A4cker?=
 <kim.carlbacker@gmail.com>
Date: Mon, 5 Dec 2016 12:17:39 +0100
Subject: [PATCH] Fix regression in PR-API #248 (#349)

* Fix #344 (regression in PR-API #248)
---
 models/pull.go | 46 +++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 39 insertions(+), 7 deletions(-)

diff --git a/models/pull.go b/models/pull.go
index 5b54058b8d..d149a142d0 100644
--- a/models/pull.go
+++ b/models/pull.go
@@ -121,12 +121,40 @@ func (pr *PullRequest) LoadIssue() (err error) {
 // Required - Issue
 // Optional - Merger
 func (pr *PullRequest) APIFormat() *api.PullRequest {
-
+	var (
+		baseBranch *Branch
+		headBranch *Branch
+		baseCommit *git.Commit
+		headCommit *git.Commit
+		err        error
+	)
 	apiIssue := pr.Issue.APIFormat()
-	baseBranch, _ := pr.BaseRepo.GetBranch(pr.BaseBranch)
-	baseCommit, _ := baseBranch.GetCommit()
-	headBranch, _ := pr.HeadRepo.GetBranch(pr.HeadBranch)
-	headCommit, _ := headBranch.GetCommit()
+	if pr.BaseRepo == nil {
+		pr.BaseRepo, err = GetRepositoryByID(pr.BaseRepoID)
+		if err != nil {
+			log.Error(log.ERROR, "GetRepositoryById[%d]: %v", pr.ID, err)
+			return nil
+		}
+	}
+	if pr.HeadRepo == nil {
+		pr.HeadRepo, err = GetRepositoryByID(pr.HeadRepoID)
+		if err != nil {
+			log.Error(log.ERROR, "GetRepositoryById[%d]: %v", pr.ID, err)
+			return nil
+		}
+	}
+	if baseBranch, err = pr.BaseRepo.GetBranch(pr.BaseBranch); err != nil {
+		return nil
+	}
+	if baseCommit, err = baseBranch.GetCommit(); err != nil {
+		return nil
+	}
+	if headBranch, err = pr.HeadRepo.GetBranch(pr.HeadBranch); err != nil {
+		return nil
+	}
+	if headCommit, err = headBranch.GetCommit(); err != nil {
+		return nil
+	}
 	apiBaseBranchInfo := &api.PRBranchInfo{
 		Name:       pr.BaseBranch,
 		Ref:        pr.BaseBranch,
@@ -590,8 +618,12 @@ func GetPullRequestByIndex(repoID int64, index int64) (*PullRequest, error) {
 		return nil, ErrPullRequestNotExist{0, repoID, index, 0, "", ""}
 	}
 
-	pr.LoadAttributes()
-	pr.LoadIssue()
+	if err = pr.LoadAttributes(); err != nil {
+		return nil, err
+	}
+	if err = pr.LoadIssue(); err != nil {
+		return nil, err
+	}
 
 	return pr, nil
 }