Example #1
0
 public function testMerge()
 {
     $segmentsDirectory = new Directory\Filesystem(__DIR__ . '/_source/_files');
     $outputDirectory = new Directory\Filesystem(__DIR__ . '/_files');
     $segmentsList = array('_0', '_1', '_2', '_3', '_4');
     $segmentMerger = new Index\SegmentMerger($outputDirectory, 'mergedSegment');
     foreach ($segmentsList as $segmentName) {
         $segmentMerger->addSource(new Index\SegmentInfo($segmentsDirectory, $segmentName, 2));
     }
     $mergedSegment = $segmentMerger->merge();
     $this->assertTrue($mergedSegment instanceof Index\SegmentInfo);
     unset($mergedSegment);
     $mergedFile = $outputDirectory->getFileObject('mergedSegment.cfs');
     $mergedFileData = $mergedFile->readBytes($outputDirectory->fileLength('mergedSegment.cfs'));
     $sampleFile = $outputDirectory->getFileObject('mergedSegment.cfs.sample');
     $sampleFileData = $sampleFile->readBytes($outputDirectory->fileLength('mergedSegment.cfs.sample'));
     $this->assertEquals($mergedFileData, $sampleFileData);
     $outputDirectory->deleteFile('mergedSegment.cfs');
 }
Example #2
0
 /**
  * Merge specified segments
  *
  * $segments is an array of SegmentInfo objects
  *
  * @param array $segments
  */
 private function _mergeSegments($segments)
 {
     $newName = $this->_newSegmentName();
     $merger = new SegmentMerger($this->_directory, $newName);
     foreach ($segments as $segmentInfo) {
         $merger->addSource($segmentInfo);
         $this->_segmentsToDelete[$segmentInfo->getName()] = $segmentInfo->getName();
     }
     $newSegment = $merger->merge();
     if ($newSegment !== null) {
         $this->_newSegments[$newSegment->getName()] = $newSegment;
     }
     $this->commit();
 }