@@ -389,7 +389,7 @@ func ToAPIPullRequests(ctx context.Context, baseRepo *repo_model.Repository, prs
389389 },
390390 Head : & api.PRBranchInfo {
391391 Name : pr .HeadBranch ,
392- Ref : fmt . Sprintf ( "%s%d/head" , git . PullPrefix , pr .Index ),
392+ Ref : pr .GetGitRefName ( ),
393393 RepoID : - 1 ,
394394 },
395395 }
@@ -422,72 +422,43 @@ func ToAPIPullRequests(ctx context.Context, baseRepo *repo_model.Repository, prs
422422 return nil , err
423423 }
424424 }
425-
426425 if baseBranch != nil {
427426 apiPullRequest .Base .Sha = baseBranch .CommitID
428427 }
429428
430- if pr .Flow == issues_model .PullRequestFlowAGit {
431- apiPullRequest .Head .Sha , err = gitRepo .GetRefCommitID (pr .GetGitRefName ())
429+ // pull request head branch, both repository and branch could not exist
430+ if pr .HeadRepo != nil {
431+ apiPullRequest .Head .RepoID = pr .HeadRepo .ID
432+ exist , err := git_model .IsBranchExist (ctx , pr .HeadRepo .ID , pr .HeadBranch )
432433 if err != nil {
433- log .Error ("GetRefCommitID[%s ]: %v" , pr .GetGitRefName () , err )
434+ log .Error ("IsBranchExist[%d ]: %v" , pr .HeadRepo . ID , err )
434435 return nil , err
435436 }
436- apiPullRequest .Head .RepoID = pr .BaseRepoID
437- apiPullRequest .Head .Repository = apiPullRequest .Base .Repository
438- apiPullRequest .Head .Name = ""
439- }
440-
441- var headGitRepo * git.Repository
442- if pr .HeadRepo != nil && pr .Flow == issues_model .PullRequestFlowGithub {
443- if pr .HeadRepoID == pr .BaseRepoID {
444- apiPullRequest .Head .RepoID = pr .HeadRepo .ID
445- apiPullRequest .Head .Repository = apiRepo
446- headGitRepo = gitRepo
447- } else {
448- p , err := access_model .GetUserRepoPermission (ctx , pr .HeadRepo , doer )
449- if err != nil {
450- log .Error ("GetUserRepoPermission[%d]: %v" , pr .HeadRepoID , err )
451- p .AccessMode = perm .AccessModeNone
452- }
453-
454- apiPullRequest .Head .RepoID = pr .HeadRepo .ID
455- apiPullRequest .Head .Repository = ToRepo (ctx , pr .HeadRepo , p )
456-
457- headGitRepo , err = gitrepo .OpenRepository (ctx , pr .HeadRepo )
458- if err != nil {
459- log .Error ("OpenRepository[%s]: %v" , pr .HeadRepo .RepoPath (), err )
460- return nil , err
461- }
462- defer headGitRepo .Close ()
437+ if exist {
438+ apiPullRequest .Head .Ref = pr .HeadBranch
463439 }
440+ }
441+ if apiPullRequest .Head .Ref == "" {
442+ apiPullRequest .Head .Ref = pr .GetGitRefName ()
443+ }
464444
465- headBranch , err := headGitRepo .GetBranch (pr .HeadBranch )
466- if err != nil && ! git .IsErrBranchNotExist (err ) {
467- log .Error ("GetBranch[%s]: %v" , pr .HeadBranch , err )
468- return nil , err
445+ if pr .HeadRepoID == pr .BaseRepoID {
446+ apiPullRequest .Head .Repository = apiPullRequest .Base .Repository
447+ } else {
448+ p , err := access_model .GetUserRepoPermission (ctx , pr .HeadRepo , doer )
449+ if err != nil {
450+ log .Error ("GetUserRepoPermission[%d]: %v" , pr .HeadRepoID , err )
451+ p .AccessMode = perm .AccessModeNone
469452 }
453+ apiPullRequest .Head .Repository = ToRepo (ctx , pr .HeadRepo , p )
454+ }
470455
471- if git .IsErrBranchNotExist (err ) {
472- headCommitID , err := headGitRepo .GetRefCommitID (apiPullRequest .Head .Ref )
473- if err != nil && ! git .IsErrNotExist (err ) {
474- log .Error ("GetCommit[%s]: %v" , pr .HeadBranch , err )
475- return nil , err
476- }
477- if err == nil {
478- apiPullRequest .Head .Sha = headCommitID
479- }
480- } else {
481- commit , err := headBranch .GetCommit ()
482- if err != nil && ! git .IsErrNotExist (err ) {
483- log .Error ("GetCommit[%s]: %v" , headBranch .Name , err )
484- return nil , err
485- }
486- if err == nil {
487- apiPullRequest .Head .Ref = pr .HeadBranch
488- apiPullRequest .Head .Sha = commit .ID .String ()
489- }
490- }
456+ if pr .Flow == issues_model .PullRequestFlowAGit {
457+ apiPullRequest .Head .Name = ""
458+ }
459+ apiPullRequest .Head .Sha , err = gitRepo .GetRefCommitID (pr .GetGitRefName ())
460+ if err != nil {
461+ log .Error ("GetRefCommitID[%s]: %v" , pr .GetGitRefName (), err )
491462 }
492463
493464 if len (apiPullRequest .Head .Sha ) == 0 && len (apiPullRequest .Head .Ref ) != 0 {
0 commit comments