]> source.dussan.org Git - gitblit.git/commitdiff
Fix for line number identification bug in LuceneExecutor (issue 105)
authorJames Moger <james.moger@gitblit.com>
Wed, 11 Jul 2012 20:59:04 +0000 (16:59 -0400)
committerJames Moger <james.moger@gitblit.com>
Wed, 11 Jul 2012 20:59:04 +0000 (16:59 -0400)
docs/04_releases.mkd
src/com/gitblit/LuceneExecutor.java

index 3c22dbe445b124e89cef76389bf1e8acdb3df4c1..40f3194576bf9233925fc3cc3cdcfa4204605b53 100644 (file)
@@ -6,6 +6,7 @@
 \r
 #### fixes\r
 \r
+- Fixed intermittent bug in identifying line numbers in Lucene search (issue 105)\r
 - Adjust repository search to handle foo.git and foo/bar.git (issue 104)\r
 - Fixed bug where a repository set as authenticated push did not have anonymous clone access (issue 96)\r
 - Fixed bug in Basic authentication if passwords had a colon (Github/peterloron)\r
index 81265f5662c10df29fd407abe760838bc9331c40..c702dcc7156f5f199a7cc3db09a7556bc0e3426f 100644 (file)
@@ -1205,7 +1205,13 @@ public class LuceneExecutor implements Runnable {
                        return "<pre class=\"text\">" + StringUtils.escapeForHtml(fragment, true) + "</pre>";\r
                }\r
                \r
-               int contentPos = 0;\r
+               // make sure we have unique fragments\r
+               Set<String> uniqueFragments = new LinkedHashSet<String>();\r
+               for (String fragment : fragments) {\r
+                       uniqueFragments.add(fragment);\r
+               }\r
+               fragments = uniqueFragments.toArray(new String[uniqueFragments.size()]);\r
+               \r
                StringBuilder sb = new StringBuilder();\r
                for (int i = 0, len = fragments.length; i < len; i++) {\r
                        String fragment = fragments[i];\r
@@ -1215,7 +1221,7 @@ public class LuceneExecutor implements Runnable {
                        String raw = fragment.replace(termTag, "").replace(termTagEnd, "");\r
 \r
                        // determine position of the raw fragment in the content\r
-                       int pos = content.indexOf(raw, contentPos);\r
+                       int pos = content.indexOf(raw);\r
                                \r
                        // restore complete first line of fragment\r
                        int c = pos;\r
@@ -1243,8 +1249,6 @@ public class LuceneExecutor implements Runnable {
                                }\r
                                tag = MessageFormat.format("<pre class=\"prettyprint linenums:{0,number,0}{1}\">", line, lang);\r
                                                                \r
-                               // update offset into content                           \r
-                               contentPos = pos + raw.length() + 1;\r
                        }\r
                        \r
                        sb.append(tag);\r