Dave Jarvis' Repositories

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

Optimizes finding tree entries

AuthorDave Jarvis <email>
Date2026-02-21 20:46:54 GMT-0800
Commit64b12f76ff1dd997e282b1afad5bb0c81fb807d5
Parent1d5eebe
Delta18 lines added, 8 lines removed, 10-line increase
git/Git.php
$data = $this->read( $treeSha );
$entry = [ 'sha' => '', 'mode' => '' ];
+ $pos = 0;
+ $len = strlen( $data );
- $this->parseTreeData(
- $data,
- function( $file, $n, $sha, $mode ) use ( $name, &$entry ) {
- if( $file->isName( $name ) ) {
- $entry = [ 'sha' => $sha, 'mode' => $mode ];
+ while( $pos < $len ) {
+ $space = strpos( $data, ' ', $pos );
+ $eos = strpos( $data, "\0", $space );
- return false;
- }
+ if( $space === false || $eos === false || $eos + 21 > $len ) {
+ break;
}
- );
+
+ $curName = substr( $data, $space + 1, $eos - $space - 1 );
+
+ if( $curName === $name ) {
+ $entry['mode'] = substr( $data, $pos, $space - $pos );
+ $entry['sha'] = bin2hex( substr( $data, $eos + 1, 20 ) );
+ break;
+ }
+
+ $pos = $eos + 21;
+ }
return $entry;