@@ -66,7 +66,6 @@ type PullRequest struct {
6666	HeadRepo         * Repository  `xorm:"-"` 
6767	BaseRepoID       int64        `xorm:"INDEX"` 
6868	BaseRepo         * Repository  `xorm:"-"` 
69- 	HeadUserName     string 
7069	HeadBranch       string 
7170	BaseBranch       string 
7271	ProtectedBranch  * ProtectedBranch  `xorm:"-"` 
@@ -79,6 +78,15 @@ type PullRequest struct {
7978	MergedUnix      timeutil.TimeStamp  `xorm:"updated INDEX"` 
8079}
8180
81+ // MustHeadUserName returns the HeadRepo's username if failed return blank 
82+ func  (pr  * PullRequest ) MustHeadUserName () string  {
83+ 	if  err  :=  pr .LoadHeadRepo (); err  !=  nil  {
84+ 		log .Error ("LoadHeadRepo: %v" , err )
85+ 		return  "" 
86+ 	}
87+ 	return  pr .HeadRepo .MustOwnerName ()
88+ }
89+ 
8290// Note: don't try to get Issue because will end up recursive querying. 
8391func  (pr  * PullRequest ) loadAttributes (e  Engine ) (err  error ) {
8492	if  pr .HasMerged  &&  pr .Merger  ==  nil  {
@@ -102,6 +110,10 @@ func (pr *PullRequest) LoadAttributes() error {
102110// LoadBaseRepo loads pull request base repository from database 
103111func  (pr  * PullRequest ) LoadBaseRepo () error  {
104112	if  pr .BaseRepo  ==  nil  {
113+ 		if  pr .HeadRepoID  ==  pr .BaseRepoID  &&  pr .HeadRepo  !=  nil  {
114+ 			pr .BaseRepo  =  pr .HeadRepo 
115+ 			return  nil 
116+ 		}
105117		var  repo  Repository 
106118		if  has , err  :=  x .ID (pr .BaseRepoID ).Get (& repo ); err  !=  nil  {
107119			return  err 
@@ -113,6 +125,24 @@ func (pr *PullRequest) LoadBaseRepo() error {
113125	return  nil 
114126}
115127
128+ // LoadHeadRepo loads pull request head repository from database 
129+ func  (pr  * PullRequest ) LoadHeadRepo () error  {
130+ 	if  pr .HeadRepo  ==  nil  {
131+ 		if  pr .HeadRepoID  ==  pr .BaseRepoID  &&  pr .BaseRepo  !=  nil  {
132+ 			pr .HeadRepo  =  pr .BaseRepo 
133+ 			return  nil 
134+ 		}
135+ 		var  repo  Repository 
136+ 		if  has , err  :=  x .ID (pr .HeadRepoID ).Get (& repo ); err  !=  nil  {
137+ 			return  err 
138+ 		} else  if  ! has  {
139+ 			return  ErrRepoNotExist {ID : pr .BaseRepoID }
140+ 		}
141+ 		pr .HeadRepo  =  & repo 
142+ 	}
143+ 	return  nil 
144+ }
145+ 
116146// LoadIssue loads issue information from database 
117147func  (pr  * PullRequest ) LoadIssue () (err  error ) {
118148	return  pr .loadIssue (x )
@@ -152,7 +182,7 @@ func (pr *PullRequest) GetDefaultMergeMessage() string {
152182			return  "" 
153183		}
154184	}
155- 	return  fmt .Sprintf ("Merge branch '%s' of %s/%s into %s" , pr .HeadBranch , pr .HeadUserName , pr .HeadRepo .Name , pr .BaseBranch )
185+ 	return  fmt .Sprintf ("Merge branch '%s' of %s/%s into %s" , pr .HeadBranch , pr .MustHeadUserName () , pr .HeadRepo .Name , pr .BaseBranch )
156186}
157187
158188// GetDefaultSquashMessage returns default message used when squash and merging pull request 
@@ -1159,18 +1189,6 @@ func checkForInvalidation(requests PullRequestList, repoID int64, doer *User, br
11591189	return  nil 
11601190}
11611191
1162- // ChangeUsernameInPullRequests changes the name of head_user_name 
1163- func  ChangeUsernameInPullRequests (oldUserName , newUserName  string ) error  {
1164- 	pr  :=  PullRequest {
1165- 		HeadUserName : strings .ToLower (newUserName ),
1166- 	}
1167- 	_ , err  :=  x .
1168- 		Cols ("head_user_name" ).
1169- 		Where ("head_user_name = ?" , strings .ToLower (oldUserName )).
1170- 		Update (pr )
1171- 	return  err 
1172- }
1173- 
11741192// checkAndUpdateStatus checks if pull request is possible to leaving checking status, 
11751193// and set to be either conflict or mergeable. 
11761194func  (pr  * PullRequest ) checkAndUpdateStatus () {
0 commit comments