| | $cur = $stream->tell(); |
| | $baseCtx = $context->deriveOffsetContext( $neg ); |
| | - $baseSz = $this->getSize( $baseCtx ); |
| | - |
| | - if( $baseSz > self::MAX_BASE_RAM ) { |
| | - $tmp = BufferedReader::createTemp(); |
| | - |
| | - foreach( $this->streamEntryGenerator( $baseCtx ) as $chunk ) { |
| | - $tmp->write( $chunk ); |
| | - } |
| | - |
| | - $tmp->rewind(); |
| | - $stream->seek( $cur ); |
| | + $tmp = BufferedReader::createTemp(); |
| | |
| | - yield from $this->decoder->applyStreamGenerator( $stream, $tmp ); |
| | - } else { |
| | - $base = $this->read( |
| | - $baseCtx, |
| | - 0, |
| | - function( string $sha, int $cap ) use ( $context ): string { |
| | - return $this->resolveBaseSha( $sha, $cap, $context ); |
| | - } |
| | - ); |
| | + foreach( $this->streamEntryGenerator( $baseCtx ) as $chunk ) { |
| | + $tmp->write( $chunk ); |
| | + } |
| | |
| | - $stream->seek( $cur ); |
| | + $tmp->rewind(); |
| | + $stream->seek( $cur ); |
| | |
| | - yield from $this->decoder->applyStreamGenerator( $stream, $base ); |
| | - } |
| | + yield from $this->decoder->applyStreamGenerator( $stream, $tmp ); |
| | } |
| | |
| | private function processRefDelta( |
| | StreamReader $stream, |
| | PackContext $context |
| | ): Generator { |
| | - $baseSha = bin2hex( $stream->read( 20 ) ); |
| | - $cur = $stream->tell(); |
| | - $baseSize = $context->resolveBaseSize( $baseSha ); |
| | - |
| | - if( $baseSize > self::MAX_BASE_RAM ) { |
| | - $tmp = BufferedReader::createTemp(); |
| | - $add = false; |
| | - |
| | - foreach( $context->resolveBaseStream( $baseSha ) as $chunk ) { |
| | - $tmp->write( $chunk ); |
| | - |
| | - $add = true; |
| | - } |
| | - |
| | - if( $add ) { |
| | - $tmp->rewind(); |
| | - $stream->seek( $cur ); |
| | - |
| | - yield from $this->decoder->applyStreamGenerator( $stream, $tmp ); |
| | - } |
| | - } else { |
| | - $chunks = []; |
| | - $add = false; |
| | - |
| | - foreach( $context->resolveBaseStream( $baseSha ) as $chunk ) { |
| | - $chunks[] = $chunk; |
| | + $baseSha = bin2hex( $stream->read( 20 ) ); |
| | + $cur = $stream->tell(); |
| | + $tmp = BufferedReader::createTemp(); |
| | + $add = false; |
| | |
| | - $add = true; |
| | - } |
| | + foreach( $context->resolveBaseStream( $baseSha ) as $chunk ) { |
| | + $tmp->write( $chunk ); |
| | |
| | - if( $add ) { |
| | - $base = implode( '', $chunks ); |
| | + $add = true; |
| | + } |
| | |
| | - $stream->seek( $cur ); |
| | + if( $add ) { |
| | + $tmp->rewind(); |
| | + $stream->seek( $cur ); |
| | |
| | - yield from $this->decoder->applyStreamGenerator( $stream, $base ); |
| | - } |
| | + yield from $this->decoder->applyStreamGenerator( $stream, $tmp ); |
| | } |
| | } |