# HG changeset patch # User Mike Becker # Date 1633871532 -7200 # Node ID 1d48b38ca349d743e2c972939bedaaaa29eed49d # Parent 84e42725bf8efad07450f0b7cc6fababaf33d5be fix diff generated between feed entries with different issue IDs diff -r 84e42725bf8e -r 1d48b38ca349 src/main/kotlin/de/uapcore/lightpit/servlet/FeedServlet.kt --- a/src/main/kotlin/de/uapcore/lightpit/servlet/FeedServlet.kt Sun Oct 10 14:56:03 2021 +0200 +++ b/src/main/kotlin/de/uapcore/lightpit/servlet/FeedServlet.kt Sun Oct 10 15:12:12 2021 +0200 @@ -73,10 +73,14 @@ val diff = fullContent(cur) val result = generator.generateDiffRows( - listOf(prev.subject, prev.component, prev.status, - prev.category, prev.assignee, prev.eta, prev.affected, prev.resolved), - listOf(diff.subject, diff.component, diff.status, - diff.category, diff.assignee, diff.eta, diff.affected, diff.resolved) + listOf( + prev.subject, prev.component, prev.status, + prev.category, prev.assignee, prev.eta, prev.affected, prev.resolved + ), + listOf( + diff.subject, diff.component, diff.status, + diff.category, diff.assignee, diff.eta, diff.affected, diff.resolved + ) ) diff.subject = result[0].oldLine @@ -100,15 +104,20 @@ * Generates the feed entries. * Assumes that [historyEntry] is already sorted by timestamp (descending). */ - private fun generateFeedEntries(historyEntry: List) = - if (historyEntry.isEmpty()) emptyList() - else historyEntry.zipWithNext().map { (cur, next) -> - IssueFeedEntry( - cur.time, cur.type, diffContent(cur.data, next.data) - ) - }.plus( - historyEntry.last().let { IssueFeedEntry(it.time, it.type, fullContent(it.data)) } - ) + private fun generateFeedEntries(historyEntry: List): List = + if (historyEntry.isEmpty()) { + emptyList() + } else { + historyEntry.groupBy { it.data.id }.mapValues { (_, history) -> + history.zipWithNext().map { (cur, next) -> + IssueFeedEntry( + cur.time, cur.type, diffContent(cur.data, next.data) + ) + }.plus( + history.last().let { IssueFeedEntry(it.time, it.type, fullContent(it.data)) } + ) + }.flatMap { it.value }.sortedByDescending { it.time } + } private fun issues(http: HttpRequest, dao: DataAccessObject) { val project = http.pathParams["project"]?.let { dao.findProjectByNode(it) }