mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-04 05:18:25 +00:00 
			
		
		
		
	Fix PR's target branch dropdown (#33589)
Fix #33586 It only moves `PrepareBranchList` and `retrieveAssigneesData` to before the `CanModifyIssueOrPull` check, and adds more comments
This commit is contained in:
		@@ -79,16 +79,29 @@ func retrieveRepoIssueMetaData(ctx *context.Context, repo *repo_model.Repository
 | 
				
			|||||||
		return data
 | 
							return data
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	data.CanModifyIssueOrPull = ctx.Repo.CanWriteIssuesOrPulls(isPull) && !ctx.Repo.Repository.IsArchived
 | 
						// it sets "Branches" template data,
 | 
				
			||||||
	if !data.CanModifyIssueOrPull {
 | 
						// it is used to render the "edit PR target branches" dropdown, and the "branch selector" in the issue's sidebar.
 | 
				
			||||||
 | 
						PrepareBranchList(ctx)
 | 
				
			||||||
 | 
						if ctx.Written() {
 | 
				
			||||||
		return data
 | 
							return data
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	data.retrieveAssigneesDataForIssueWriter(ctx)
 | 
						// it sets the "Assignees" template data, and the data is also used to "mention" users.
 | 
				
			||||||
 | 
						data.retrieveAssigneesData(ctx)
 | 
				
			||||||
	if ctx.Written() {
 | 
						if ctx.Written() {
 | 
				
			||||||
		return data
 | 
							return data
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// TODO: the issue/pull permissions are quite complex and unclear
 | 
				
			||||||
 | 
						// A reader could create an issue/PR with setting some meta (eg: assignees from issue template, reviewers, target branch)
 | 
				
			||||||
 | 
						// A reader(creator) could update some meta (eg: target branch), but can't change assignees anymore.
 | 
				
			||||||
 | 
						// For non-creator users, only writers could update some meta (eg: assignees, milestone, project)
 | 
				
			||||||
 | 
						// Need to clarify the logic and add some tests in the future
 | 
				
			||||||
 | 
						data.CanModifyIssueOrPull = ctx.Repo.CanWriteIssuesOrPulls(isPull) && !ctx.Repo.Repository.IsArchived
 | 
				
			||||||
 | 
						if !data.CanModifyIssueOrPull {
 | 
				
			||||||
 | 
							return data
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	data.retrieveMilestonesDataForIssueWriter(ctx)
 | 
						data.retrieveMilestonesDataForIssueWriter(ctx)
 | 
				
			||||||
	if ctx.Written() {
 | 
						if ctx.Written() {
 | 
				
			||||||
		return data
 | 
							return data
 | 
				
			||||||
@@ -99,11 +112,6 @@ func retrieveRepoIssueMetaData(ctx *context.Context, repo *repo_model.Repository
 | 
				
			|||||||
		return data
 | 
							return data
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	PrepareBranchList(ctx)
 | 
					 | 
				
			||||||
	if ctx.Written() {
 | 
					 | 
				
			||||||
		return data
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	ctx.Data["CanCreateIssueDependencies"] = ctx.Repo.CanCreateIssueDependencies(ctx, ctx.Doer, isPull)
 | 
						ctx.Data["CanCreateIssueDependencies"] = ctx.Repo.CanCreateIssueDependencies(ctx, ctx.Doer, isPull)
 | 
				
			||||||
	return data
 | 
						return data
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -131,7 +139,7 @@ func (d *IssuePageMetaData) retrieveMilestonesDataForIssueWriter(ctx *context.Co
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (d *IssuePageMetaData) retrieveAssigneesDataForIssueWriter(ctx *context.Context) {
 | 
					func (d *IssuePageMetaData) retrieveAssigneesData(ctx *context.Context) {
 | 
				
			||||||
	var err error
 | 
						var err error
 | 
				
			||||||
	d.AssigneesData.CandidateAssignees, err = repo_model.GetRepoAssignees(ctx, d.Repository)
 | 
						d.AssigneesData.CandidateAssignees, err = repo_model.GetRepoAssignees(ctx, d.Repository)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user