Exemplo n.º 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');
    }
Exemplo n.º 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();
 }