Index: lucene/src/test/org/apache/lucene/TestDemo.java =================================================================== --- lucene/src/test/org/apache/lucene/TestDemo.java (revision 1139242) +++ lucene/src/test/org/apache/lucene/TestDemo.java (working copy) @@ -23,6 +23,7 @@ import org.apache.lucene.analysis.MockAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; +import org.apache.lucene.index.CheckIndex; import org.apache.lucene.index.RandomIndexWriter; import org.apache.lucene.queryParser.ParseException; import org.apache.lucene.queryParser.QueryParser; @@ -74,6 +75,9 @@ assertEquals(1, isearcher.search(query, null, 1).totalHits); isearcher.close(); + CheckIndex ci = new CheckIndex(directory); + ci.setInfoStream(System.out); + ci.checkIndex(); directory.close(); } } Index: lucene/src/test/org/apache/lucene/util/TestVersionComparator.java =================================================================== --- lucene/src/test/org/apache/lucene/util/TestVersionComparator.java (revision 1139242) +++ lucene/src/test/org/apache/lucene/util/TestVersionComparator.java (working copy) @@ -43,5 +43,10 @@ assertTrue(comp.compare("1.10", "1.9") > 0); assertTrue(comp.compare("1.9", "1.10") < 0); + + assertTrue(comp.compare("0", "1.0") < 0); + assertTrue(comp.compare("00", "1.0") < 0); + assertTrue(comp.compare("-1.0", "1.0") < 0); + assertTrue(comp.compare("3.0", Integer.toString(Integer.MIN_VALUE)) > 0); } } Index: lucene/src/java/org/apache/lucene/index/CheckIndex.java =================================================================== --- lucene/src/java/org/apache/lucene/index/CheckIndex.java (revision 1139242) +++ lucene/src/java/org/apache/lucene/index/CheckIndex.java (working copy) @@ -22,6 +22,7 @@ import org.apache.lucene.store.FSDirectory; import org.apache.lucene.store.Directory; import org.apache.lucene.store.IndexInput; +import org.apache.lucene.util.StringHelper; import org.apache.lucene.document.AbstractField; // for javadocs import org.apache.lucene.document.Document; @@ -31,6 +32,7 @@ import java.io.File; import java.util.Collection; +import java.util.Comparator; import java.util.List; import java.util.ArrayList; import java.util.Map; @@ -331,6 +333,25 @@ return result; } + // find the oldest and newest segment versions + String oldest = Integer.toString(Integer.MAX_VALUE), newest = Integer.toString(Integer.MIN_VALUE); + String pre31 = null; + Comparator versionComparator = StringHelper.getVersionComparator(); + for (SegmentInfo si : sis) { + String version = si.getVersion(); + if (version == null) { + // pre-3.1 segment + pre31 = "pre 3.1"; + } else { + if (versionComparator.compare(version, oldest) < 0) { + oldest = version; + } + if (versionComparator.compare(version, newest) > 0) { + newest = version; + } + } + } + final int numSegments = sis.size(); final String segmentsFileName = sis.getCurrentSegmentFileName(); IndexInput input = null; @@ -382,7 +403,7 @@ else if (format == SegmentInfos.FORMAT_HAS_VECTORS) sFormat = "FORMAT_HAS_VECTORS [Lucene 3.1]"; else if (format == SegmentInfos.FORMAT_3_1) - sFormat = "FORMAT_3_1 [Lucene 3.1]"; + sFormat = "FORMAT_3_1 [Lucene 3.1+]"; else if (format == SegmentInfos.CURRENT_FORMAT) throw new RuntimeException("BUG: You should update this tool!"); else if (format < SegmentInfos.CURRENT_FORMAT) { @@ -404,7 +425,10 @@ userDataString = ""; } - msg("Segments file=" + segmentsFileName + " numSegments=" + numSegments + " version=" + sFormat + userDataString); + msg("Segments file=" + segmentsFileName + " numSegments=" + numSegments + + " format=" + sFormat + " oldestSegment=" + + (pre31 == null ? oldest : pre31) + " newestSegment=" + newest + + userDataString); if (onlySegments != null) { result.partial = true; Index: lucene/src/java/org/apache/lucene/util/StringHelper.java =================================================================== --- lucene/src/java/org/apache/lucene/util/StringHelper.java (revision 1139242) +++ lucene/src/java/org/apache/lucene/util/StringHelper.java (working copy) @@ -76,7 +76,7 @@ if (bTokens.hasMoreTokens()) { int bToken = Integer.parseInt(bTokens.nextToken()); if (aToken != bToken) { - return aToken - bToken; + return aToken < bToken ? -1 : 1; } } else { // a has some extra trailing tokens. if these are all zeroes, thats ok.