From 3fc4f3670cb748e02d786111d2029ef1e23a9640 Mon Sep 17 00:00:00 2001
From: zeripath <art27@cantab.net>
Date: Mon, 9 Mar 2020 07:06:38 +0000
Subject: [PATCH] Fix panic in API pulls when headbranch does not exist
 (#10676)

* Fix panic in API pulls when headbranch does not exist
* refix other reference to plumbing.ErrReferenceNotFound

Signed-off-by: Andrew Thornton <art27@cantab.net>
---
 modules/convert/pull.go    | 2 +-
 modules/git/repo_commit.go | 5 +++++
 routers/repo/branch.go     | 3 +--
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/modules/convert/pull.go b/modules/convert/pull.go
index ccf64ef3ea..6ff88c4d8a 100644
--- a/modules/convert/pull.go
+++ b/modules/convert/pull.go
@@ -114,7 +114,7 @@ func ToAPIPullRequest(pr *models.PullRequest) *api.PullRequest {
 		if git.IsErrBranchNotExist(err) {
 			headCommitID, err := headGitRepo.GetRefCommitID(apiPullRequest.Head.Ref)
 			if err != nil && !git.IsErrNotExist(err) {
-				log.Error("GetCommit[%s]: %v", headBranch.Name, err)
+				log.Error("GetCommit[%s]: %v", pr.HeadBranch, err)
 				return nil
 			}
 			if err == nil {
diff --git a/modules/git/repo_commit.go b/modules/git/repo_commit.go
index d20c6540eb..618b89438c 100644
--- a/modules/git/repo_commit.go
+++ b/modules/git/repo_commit.go
@@ -21,6 +21,11 @@ import (
 func (repo *Repository) GetRefCommitID(name string) (string, error) {
 	ref, err := repo.gogitRepo.Reference(plumbing.ReferenceName(name), true)
 	if err != nil {
+		if err == plumbing.ErrReferenceNotFound {
+			return "", ErrNotExist{
+				ID: name,
+			}
+		}
 		return "", err
 	}
 
diff --git a/routers/repo/branch.go b/routers/repo/branch.go
index ea4f68948d..7127d50ed8 100644
--- a/routers/repo/branch.go
+++ b/routers/repo/branch.go
@@ -17,7 +17,6 @@ import (
 	"code.gitea.io/gitea/modules/repofiles"
 	repo_module "code.gitea.io/gitea/modules/repository"
 	"code.gitea.io/gitea/modules/util"
-	"gopkg.in/src-d/go-git.v4/plumbing"
 )
 
 const (
@@ -253,7 +252,7 @@ func loadBranches(ctx *context.Context) []*Branch {
 					repoIDToGitRepo[pr.BaseRepoID] = baseGitRepo
 				}
 				pullCommit, err := baseGitRepo.GetRefCommitID(pr.GetGitRefName())
-				if err != nil && err != plumbing.ErrReferenceNotFound {
+				if err != nil && !git.IsErrNotExist(err) {
 					ctx.ServerError("GetBranchCommitID", err)
 					return nil
 				}