diff --git a/models/issue_assignees.go b/models/issue_assignees.go index b3511f8b59..10bc2dafbe 100644 --- a/models/issue_assignees.go +++ b/models/issue_assignees.go @@ -155,31 +155,26 @@ func toggleUserAssignee(e db.Engine, issue *Issue, assigneeID int64) (removed bo } // Check if the submitted user is already assigned, if yes delete him otherwise add him - var i int - for i = 0; i < len(issue.Assignees); i++ { + found := false + i := 0 + for ; i < len(issue.Assignees); i++ { if issue.Assignees[i].ID == assigneeID { + found = true break } } assigneeIn := IssueAssignees{AssigneeID: assigneeID, IssueID: issue.ID} - toBeDeleted := i < len(issue.Assignees) - if toBeDeleted { - issue.Assignees = append(issue.Assignees[:i], issue.Assignees[i:]...) + if found { + issue.Assignees = append(issue.Assignees[:i], issue.Assignees[i+1:]...) _, err = e.Delete(assigneeIn) - if err != nil { - return toBeDeleted, err - } } else { issue.Assignees = append(issue.Assignees, assignee) _, err = e.Insert(assigneeIn) - if err != nil { - return toBeDeleted, err - } } - return toBeDeleted, nil + return found, err } // MakeIDsFromAPIAssigneesToAdd returns an array with all assignee IDs diff --git a/services/issue/assignee.go b/services/issue/assignee.go index 4fdf0029c8..7ccefef78e 100644 --- a/services/issue/assignee.go +++ b/services/issue/assignee.go @@ -16,9 +16,10 @@ import ( // DeleteNotPassedAssignee deletes all assignees who aren't passed via the "assignees" array func DeleteNotPassedAssignee(issue *models.Issue, doer *user_model.User, assignees []*user_model.User) (err error) { var found bool + oriAssignes := make([]*user_model.User, len(issue.Assignees)) + _ = copy(oriAssignes, issue.Assignees) - for _, assignee := range issue.Assignees { - + for _, assignee := range oriAssignes { found = false for _, alreadyAssignee := range assignees { if assignee.ID == alreadyAssignee.ID {