diff -r 4258b9e010ae -r 819c5178b6fe src/main/kotlin/de/uapcore/lightpit/servlet/FeedServlet.kt
--- a/src/main/kotlin/de/uapcore/lightpit/servlet/FeedServlet.kt Sat Oct 09 20:05:39 2021 +0200
+++ b/src/main/kotlin/de/uapcore/lightpit/servlet/FeedServlet.kt Sun Oct 10 14:46:10 2021 +0200
@@ -25,6 +25,8 @@
package de.uapcore.lightpit.servlet
+import com.github.difflib.text.DiffRow
+import com.github.difflib.text.DiffRowGenerator
import de.uapcore.lightpit.AbstractServlet
import de.uapcore.lightpit.HttpRequest
import de.uapcore.lightpit.dao.DataAccessObject
@@ -36,6 +38,7 @@
import java.text.SimpleDateFormat
import javax.servlet.annotation.WebServlet
+
@WebServlet(urlPatterns = ["/feed/*"])
class FeedServlet : AbstractServlet() {
@@ -43,8 +46,6 @@
get("/%project/issues.rss", this::issues)
}
- private fun String.convertLF() = replace("\r", "").replace("\n", "
")
-
private fun fullContent(issue: IssueHistoryData) = IssueDiff(
issue.id,
issue.subject,
@@ -52,7 +53,7 @@
issue.status.name,
issue.category.name,
issue.subject,
- issue.description.convertLF(),
+ issue.description.replace("\r", ""),
issue.assignee,
issue.eta?.let { SimpleDateFormat("dd.MM.yyyy").format(it) } ?: "",
issue.affected,
@@ -60,9 +61,38 @@
)
private fun diffContent(cur: IssueHistoryData, next: IssueHistoryData): IssueDiff {
+ val generator = DiffRowGenerator.create()
+ .showInlineDiffs(true)
+ .mergeOriginalRevised(true)
+ .inlineDiffByWord(true)
+ .oldTag { start -> if (start) "" else "" }
+ .newTag { start -> if (start) "" else "" }
+ .build()
+
val prev = fullContent(next)
val diff = fullContent(cur)
- // TODO: compute and apply diff
+
+ 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)
+ )
+
+ diff.subject = result[0].oldLine
+ diff.component = result[1].oldLine
+ diff.status = result[2].oldLine
+ diff.category = result[3].oldLine
+ diff.assignee = result[4].oldLine
+ diff.eta = result[5].oldLine
+ diff.affected = result[6].oldLine
+ diff.resolved = result[7].oldLine
+
+ diff.description = generator.generateDiffRows(
+ prev.description.split('\n'),
+ diff.description.split('\n')
+ ).joinToString("
", transform = DiffRow::getOldLine)
+
return diff
}