From 9159964ada44951ba5ee2a41e7bf2fe6f7f7993f Mon Sep 17 00:00:00 2001
From: Giteabot <teabot@gitea.io>
Date: Mon, 17 Jul 2023 08:14:22 -0400
Subject: [PATCH] Avoid opening/closing PRs which are already merged (#25883)
 (#25903)

Backport #25883 by @yp05327

We can select PRs to open/close them by one click, but we forgot to
check whether it is merged.
You can get an opening merged PR:

![image](https://github.com/go-gitea/gitea/assets/18380374/22c2e747-4bb9-4742-a9aa-ef39d5308bc5)

You can confirm this in:
https://try.gitea.io/yp05327/testrepo/pulls/5

Co-authored-by: yp05327 <576951401@qq.com>
---
 routers/web/repo/issue.go | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/routers/web/repo/issue.go b/routers/web/repo/issue.go
index d436abba2f..4cf319e958 100644
--- a/routers/web/repo/issue.go
+++ b/routers/web/repo/issue.go
@@ -2726,7 +2726,15 @@ func UpdateIssueStatus(ctx *context.Context) {
 		ctx.ServerError("LoadRepositories", err)
 		return
 	}
+	if err := issues.LoadPullRequests(ctx); err != nil {
+		ctx.ServerError("LoadPullRequests", err)
+		return
+	}
+
 	for _, issue := range issues {
+		if issue.IsPull && issue.PullRequest.HasMerged {
+			continue
+		}
 		if issue.IsClosed != isClosed {
 			if err := issue_service.ChangeStatus(issue, ctx.Doer, "", isClosed); err != nil {
 				if issues_model.IsErrDependenciesLeft(err) {