@@ -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