java-diff-utils / java-diff-utils

Diff Utils library is an OpenSource library for performing the comparison / diff operations between texts or some kind of data: computing diffs, applying patches, generating unified diffs or parsing them, generating diff output for easy future displaying (like side-by-side view) and so on.

Home Page:https://java-diff-utils.github.io/java-diff-utils/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Add section heading support to diff parse utils

kuoruan opened this issue · comments

.compile("^@@\\s+-(?:(\\d+)(?:,(\\d+))?)\\s+\\+(?:(\\d+)(?:,(\\d+))?)\\s+@@$");

Current Pattern do not support section heading: https://en.wikipedia.org/wiki/Diff#Unified_format

It can be:

^@@\\s+-(\\d+)(?:,(\\d+))?\\s+\+(\\d+)(?:,(\\d+))?\\s+@@(?:\\s+(.+))?$
commented

Could you give an example diff file. I implement it and make a test. However, PRs are welcome.

Sure:

https://github.com/java-diff-utils/java-diff-utils/commit/281c073c56a0cd0052963562e007c51ce2994983.diff

--- a/java-diff-utils/src/main/java/com/github/difflib/UnifiedDiffUtils.java
+++ b/java-diff-utils/src/main/java/com/github/difflib/UnifiedDiffUtils.java
@@ -420,11 +420,11 @@ private static void insertOrig(List<List<String>> diffList, List<String> result,
                 int end = nexMap.get("revRow") - 2;
                 insert(result, getOrigList(original, start, end));
             }
+            int start = map.get("orgRow") + map.get("orgDel") - 1;
+            start = start == -1 ? 0 : start;
             if (simb.contains("@@ -1,") && null == nexSimb && map.get("orgDel") != original.size()) {
-                insert(result, getOrigList(original, 0, original.size() - 1));
+                insert(result, getOrigList(original, start, original.size() - 1));
             } else if (null == nexSimb && (map.get("orgRow") + map.get("orgDel") - 1) < original.size()) {
-                int start = map.get("orgRow") + map.get("orgDel") - 1;
-                start = start == -1 ? 0 : start;
                 insert(result, getOrigList(original, start, original.size() - 1));
             }
         }

Stale issue message