From cc42c6488a818499e363935c214d5c4d0aaff554 Mon Sep 17 00:00:00 2001
From: a1012112796 <1012112796@qq.com>
Date: Sun, 19 Jun 2022 18:05:15 +0800
Subject: [PATCH] fix delete pull head ref for DeleteIssue (#20032)

* fix delete pull head ref for DeleteIssue

fix #19655

Signed-off-by: a1012112796 <1012112796@qq.com>

* add different help message for delete pull request

Signed-off-by: a1012112796 <1012112796@qq.com>

Co-authored-by: 6543 <6543@obermui.de>
---
 options/locale/locale_en-US.ini                |  3 +++
 routers/web/repo/issue.go                      |  5 +++++
 services/issue/issue.go                        |  2 +-
 templates/repo/issue/view_content/sidebar.tmpl | 12 ++++++++++--
 4 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini
index 347022fbdb..72253b3640 100644
--- a/options/locale/locale_en-US.ini
+++ b/options/locale/locale_en-US.ini
@@ -1610,6 +1610,9 @@ pulls.auto_merge_canceled_schedule = The auto merge was canceled for this pull r
 pulls.auto_merge_newly_scheduled_comment = `scheduled this pull request to auto merge when all checks succeed %[1]s`
 pulls.auto_merge_canceled_schedule_comment = `canceled auto merging this pull request when all checks succeed %[1]s`
 
+pulls.delete.title = Delete this pull request?
+pulls.delete.text = Do you really want to delete this pull request? (This will permanently remove all content. Consider closing it instead, if you intend to keep it archived)
+
 milestones.new = New Milestone
 milestones.closed = Closed %s
 milestones.update_ago = Updated %s ago
diff --git a/routers/web/repo/issue.go b/routers/web/repo/issue.go
index 11d2daeeff..5b72ff79af 100644
--- a/routers/web/repo/issue.go
+++ b/routers/web/repo/issue.go
@@ -878,6 +878,11 @@ func DeleteIssue(ctx *context.Context) {
 		return
 	}
 
+	if issue.IsPull {
+		ctx.Redirect(fmt.Sprintf("%s/pulls", ctx.Repo.Repository.HTMLURL()), http.StatusSeeOther)
+		return
+	}
+
 	ctx.Redirect(fmt.Sprintf("%s/issues", ctx.Repo.Repository.HTMLURL()), http.StatusSeeOther)
 }
 
diff --git a/services/issue/issue.go b/services/issue/issue.go
index ded281e209..467bc14b84 100644
--- a/services/issue/issue.go
+++ b/services/issue/issue.go
@@ -149,7 +149,7 @@ func DeleteIssue(doer *user_model.User, gitRepo *git.Repository, issue *issues_m
 
 	// delete pull request related git data
 	if issue.IsPull {
-		if err := gitRepo.RemoveReference(fmt.Sprintf("%s%d", git.PullPrefix, issue.PullRequest.Index)); err != nil {
+		if err := gitRepo.RemoveReference(fmt.Sprintf("%s%d/head", git.PullPrefix, issue.PullRequest.Index)); err != nil {
 			return err
 		}
 	}
diff --git a/templates/repo/issue/view_content/sidebar.tmpl b/templates/repo/issue/view_content/sidebar.tmpl
index 7a966ce878..d58e6e7b9f 100644
--- a/templates/repo/issue/view_content/sidebar.tmpl
+++ b/templates/repo/issue/view_content/sidebar.tmpl
@@ -660,11 +660,19 @@
 			</button>
 			<div class="ui basic modal" id="delete">
 				<div class="ui icon header">
-					{{.i18n.Tr "repo.issues.delete.title"}}
+					{{if .Issue.IsPull}}
+						{{.i18n.Tr "repo.pulls.delete.title"}}
+					{{else}}
+						{{.i18n.Tr "repo.issues.delete.title"}}
+					{{end}}
 				</div>
 				<div class="content center">
 					<p>
-						{{.i18n.Tr "repo.issues.delete.text"}}
+						{{if .Issue.IsPull}}
+							{{.i18n.Tr "repo.pulls.delete.text"}}
+						{{else}}
+							{{.i18n.Tr "repo.issues.delete.text"}}
+						{{end}}
 					</p>
 				</div>
 				<form action="{{.Issue.Link}}/delete" method="post">