| | $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; |