From 2b67ec0e4a42ad1069a477040a549c3e19be9e36 Mon Sep 17 00:00:00 2001 From: James Moger Date: Wed, 11 Jul 2012 16:59:04 -0400 Subject: [PATCH] Fix for line number identification bug in LuceneExecutor (issue 105) --- docs/04_releases.mkd | 1 + src/com/gitblit/LuceneExecutor.java | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/docs/04_releases.mkd b/docs/04_releases.mkd index 3c22dbe4..40f31945 100644 --- a/docs/04_releases.mkd +++ b/docs/04_releases.mkd @@ -6,6 +6,7 @@ #### fixes +- Fixed intermittent bug in identifying line numbers in Lucene search (issue 105) - Adjust repository search to handle foo.git and foo/bar.git (issue 104) - Fixed bug where a repository set as authenticated push did not have anonymous clone access (issue 96) - Fixed bug in Basic authentication if passwords had a colon (Github/peterloron) diff --git a/src/com/gitblit/LuceneExecutor.java b/src/com/gitblit/LuceneExecutor.java index 81265f56..c702dcc7 100644 --- a/src/com/gitblit/LuceneExecutor.java +++ b/src/com/gitblit/LuceneExecutor.java @@ -1205,7 +1205,13 @@ public class LuceneExecutor implements Runnable { return "
" + StringUtils.escapeForHtml(fragment, true) + "
"; } - int contentPos = 0; + // make sure we have unique fragments + Set uniqueFragments = new LinkedHashSet(); + 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 @@ public class LuceneExecutor implements Runnable { 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 @@ public class LuceneExecutor implements Runnable { } tag = MessageFormat.format("
", line, lang);
 								
-				// update offset into content				
-				contentPos = pos + raw.length() + 1;
 			}
 			
 			sb.append(tag);
-- 
2.39.5