From 2bcbfbc5d47f7088b0f9661eccb2c394aee73a2b Mon Sep 17 00:00:00 2001
From: Lunny Xiao <xiaolunwen@gmail.com>
Date: Tue, 24 Dec 2024 21:52:46 -0800
Subject: [PATCH] demilestone should not include milestone (#32923)

Fix #32887

(cherry picked from commit f44712f22bc7bfce049c64c27f60453ff1e41a5c)

Conflicts:
	services/issue/milestone_test.go
  trivial conflicts (require vs assert)
(cherry picked from commit 2ffa9a5e6e24715ab62a571ca1ca9a531944ca86)
---
 services/issue/milestone.go      | 4 ++++
 services/issue/milestone_test.go | 8 ++++++++
 2 files changed, 12 insertions(+)

diff --git a/services/issue/milestone.go b/services/issue/milestone.go
index 31490c7b03..407ad0a59b 100644
--- a/services/issue/milestone.go
+++ b/services/issue/milestone.go
@@ -85,6 +85,10 @@ func changeMilestoneAssign(ctx context.Context, doer *user_model.User, issue *is
 		}
 	}
 
+	if issue.MilestoneID == 0 {
+		issue.Milestone = nil
+	}
+
 	return nil
 }
 
diff --git a/services/issue/milestone_test.go b/services/issue/milestone_test.go
index 1c06572f8e..e75f64550c 100644
--- a/services/issue/milestone_test.go
+++ b/services/issue/milestone_test.go
@@ -24,6 +24,7 @@ func TestChangeMilestoneAssign(t *testing.T) {
 
 	oldMilestoneID := issue.MilestoneID
 	issue.MilestoneID = 2
+	require.NoError(t, issue.LoadMilestone(db.DefaultContext))
 	require.NoError(t, ChangeMilestoneAssign(db.DefaultContext, issue, doer, oldMilestoneID))
 	unittest.AssertExistsAndLoadBean(t, &issues_model.Comment{
 		IssueID:        issue.ID,
@@ -32,4 +33,11 @@ func TestChangeMilestoneAssign(t *testing.T) {
 		OldMilestoneID: oldMilestoneID,
 	})
 	unittest.CheckConsistencyFor(t, &issues_model.Milestone{}, &issues_model.Issue{})
+	assert.NotNil(t, issue.Milestone)
+
+	oldMilestoneID = issue.MilestoneID
+	issue.MilestoneID = 0
+	require.NoError(t, ChangeMilestoneAssign(db.DefaultContext, issue, doer, oldMilestoneID))
+	assert.EqualValues(t, 0, issue.MilestoneID)
+	assert.Nil(t, issue.Milestone)
 }