Dave Jarvis' Repositories

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

Attempts another optimization

Author Dave Jarvis <email>
Date 2026-02-09 20:34:26 GMT-0800
Commit e3db6b93304bedd1671fdb555f47f4b666f407ac
Parent 5b40dae
Git.php
private function processTree( string $data, callable $callback ): void {
+ $entries = [];
$position = 0;
$isDir = ($mode === self::MODE_TREE || $mode === self::MODE_TREE_A);
- // Fast size calculation due to caching + binary search
- $size = $isDir ? 0 : $this->getObjectSize( $entrySha );
+ $entries[] = [
+ 'name' => $name,
+ 'sha' => $entrySha,
+ 'mode' => $mode,
+ 'isDir' => $isDir,
+ 'size' => 0
+ ];
- $callback( new File( $name, $entrySha, $mode, 0, $size ) );
$position = $nullPos + 21;
+ }
+
+ $lookupOrder = $entries;
+ usort( $lookupOrder, fn($a, $b) => strcmp( $a['sha'], $b['sha'] ) );
+
+ $sizeCache = [];
+
+ foreach( $lookupOrder as $item ) {
+ if( !$item['isDir'] ) {
+ $sizeCache[$item['sha']] = $this->getObjectSize( $item['sha'] );
+ }
+ }
+
+ foreach( $entries as $e ) {
+ $finalSize = $e['isDir'] ? 0 : ($sizeCache[$e['sha']] ?? 0);
+ $callback( new File( $e['name'], $e['sha'], $e['mode'], 0, $finalSize ) );
}
}
Delta 24 lines added, 3 lines removed, 21-line increase