From 2b67ec0e4a42ad1069a477040a549c3e19be9e36 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 11 Jul 2012 16:59:04 -0400
Subject: [PATCH] Fix for line number identification bug in LuceneExecutor (issue 105)

---
 src/com/gitblit/LuceneExecutor.java |   12 ++++++++----
 1 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/com/gitblit/LuceneExecutor.java b/src/com/gitblit/LuceneExecutor.java
index 81265f5..c702dcc 100644
--- a/src/com/gitblit/LuceneExecutor.java
+++ b/src/com/gitblit/LuceneExecutor.java
@@ -1205,7 +1205,13 @@
 			return "<pre class=\"text\">" + StringUtils.escapeForHtml(fragment, true) + "</pre>";
 		}
 		
-		int contentPos = 0;
+		// make sure we have unique fragments
+		Set<String> uniqueFragments = new LinkedHashSet<String>();
+		for (String fragment : fragments) {
+			uniqueFragments.add(fragment);
+		}
+		fragments = uniqueFragments.toArray(new String[uniqueFragments.size()]);
+		
 		StringBuilder sb = new StringBuilder();
 		for (int i = 0, len = fragments.length; i < len; i++) {
 			String fragment = fragments[i];
@@ -1215,7 +1221,7 @@
 			String raw = fragment.replace(termTag, "").replace(termTagEnd, "");
 
 			// determine position of the raw fragment in the content
-			int pos = content.indexOf(raw, contentPos);
+			int pos = content.indexOf(raw);
 				
 			// restore complete first line of fragment
 			int c = pos;
@@ -1243,8 +1249,6 @@
 				}
 				tag = MessageFormat.format("<pre class=\"prettyprint linenums:{0,number,0}{1}\">", line, lang);
 								
-				// update offset into content				
-				contentPos = pos + raw.length() + 1;
 			}
 			
 			sb.append(tag);

--
Gitblit v1.9.1