diff --git a/src/java/org/apache/lucene/index/IndexWriter.java b/src/java/org/apache/lucene/index/IndexWriter.java index 528a48bbe3c..56a5e7ac09b 100644 --- a/src/java/org/apache/lucene/index/IndexWriter.java +++ b/src/java/org/apache/lucene/index/IndexWriter.java @@ -3583,7 +3583,7 @@ public class IndexWriter { info = segmentInfos.info(i); if (info.dir != directory) { done = false; - final MergePolicy.OneMerge newMerge = new MergePolicy.OneMerge(segmentInfos.range(i, 1+i), info.getUseCompoundFile()); + final MergePolicy.OneMerge newMerge = new MergePolicy.OneMerge(segmentInfos.range(i, 1+i), mergePolicy instanceof LogMergePolicy && getUseCompoundFile()); // Returns true if no running merge conflicts // with this one (and, records this merge as diff --git a/src/test/org/apache/lucene/index/TestAddIndexesNoOptimize.java b/src/test/org/apache/lucene/index/TestAddIndexesNoOptimize.java index d61dcebcd05..a9354a1db40 100755 --- a/src/test/org/apache/lucene/index/TestAddIndexesNoOptimize.java +++ b/src/test/org/apache/lucene/index/TestAddIndexesNoOptimize.java @@ -537,4 +537,21 @@ public class TestAddIndexesNoOptimize extends LuceneTestCase { dir.close(); dir2.close(); } + + // LUCENE-1642: make sure CFS of destination indexwriter + // is respected when copying tail segments + public void testTargetCFS() throws IOException { + Directory dir = new RAMDirectory(); + IndexWriter writer = newWriter(dir, true); + writer.setUseCompoundFile(false); + addDocs(writer, 1); + writer.close(); + + Directory other = new RAMDirectory(); + writer = newWriter(other, true); + writer.setUseCompoundFile(true); + writer.addIndexesNoOptimize(new Directory[] {dir}); + assertTrue(writer.newestSegment().getUseCompoundFile()); + writer.close(); + } }