Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/treetrek.git

Read size from delta stream

AuthorDave Jarvis <email>
Date2026-02-21 11:19:24 GMT-0800
Commitfbed27e754d9ac75c245679fba0563999cd91d84
Parent69edb8d
git/DeltaDecoder.php
}
+ public function readDeltaBaseSize( mixed $handle ): int {
+ $stream = CompressionStream::createInflater();
+ $head = '';
+ $try = 0;
+
+ foreach( $stream->stream( $handle, 512 ) as $out ) {
+ $head .= $out;
+ $try++;
+
+ if( strlen( $head ) >= 32 || $try >= 64 ) {
+ break;
+ }
+ }
+
+ $pos = 0;
+ $result = 0;
+
+ if( strlen( $head ) > 0 ) {
+ $res = $this->readDeltaSize( $head, $pos );
+ $result = $res['val'];
+ }
+
+ return $result;
+ }
+
private function parseCopyInstruction(
int $op,
git/PackEntryReader.php
$neg = $this->readOffsetDelta( $handle );
$deltaPos = ftell( $handle );
- $baseSize = $this->getSize( $pool, $packFile, $offset - $neg );
+ $baseSize = $this->decoder->readDeltaBaseSize( $handle );
if( $baseSize > self::MAX_BASE_RAM ) {
} else {
$baseSha = bin2hex( fread( $handle, 20 ) );
- $baseSize = $getSizeShaFn( $baseSha );
+ $deltaPos = ftell( $handle );
+ $baseSize = $this->decoder->readDeltaBaseSize( $handle );
if( $baseSize > self::MAX_BASE_RAM ) {
if( $written ) {
rewind( $tmpHandle );
+
+ fseek( $handle, $deltaPos );
yield from $this->decoder->applyStreamGenerator(
if( $written ) {
+ fseek( $handle, $deltaPos );
+
yield from $this->decoder->applyStreamGenerator(
$handle,
Delta32 lines added, 2 lines removed, 30-line increase