| | $data = $this->read( $treeSha ); |
| | $entry = [ 'sha' => '', 'mode' => '' ]; |
| | - $pos = 0; |
| | - $len = strlen( $data ); |
| | - |
| | - while( $pos < $len ) { |
| | - $space = strpos( $data, ' ', $pos ); |
| | - $eos = strpos( $data, "\0", $space ); |
| | - |
| | - if( $space === false || $eos === false || $eos + 21 > $len ) { |
| | - break; |
| | - } |
| | |
| | - $curName = substr( $data, $space + 1, $eos - $space - 1 ); |
| | + $this->parseTreeData( |
| | + $data, |
| | + function( $file, $n, $sha, $mode ) use ( $name, &$entry ) { |
| | + if( $file->isName( $name ) ) { |
| | + $entry = [ 'sha' => $sha, 'mode' => $mode ]; |
| | |
| | - if( $curName === $name ) { |
| | - $entry['mode'] = substr( $data, $pos, $space - $pos ); |
| | - $entry['sha'] = bin2hex( substr( $data, $eos + 1, 20 ) ); |
| | - break; |
| | + return false; |
| | + } |
| | } |
| | - |
| | - $pos = $eos + 21; |
| | - } |
| | + ); |
| | |
| | return $entry; |