Fix lfs management find (#15537)
Fix #15236 * Do not do 40byte conversion within ParseTreeLine * Missed a to40ByteSHA Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
parent
9b8ffa1c7a
commit
2255afffad
|
@ -149,10 +149,10 @@ headerLoop:
|
||||||
// constant hextable to help quickly convert between 20byte and 40byte hashes
|
// constant hextable to help quickly convert between 20byte and 40byte hashes
|
||||||
const hextable = "0123456789abcdef"
|
const hextable = "0123456789abcdef"
|
||||||
|
|
||||||
// to40ByteSHA converts a 20-byte SHA in a 40-byte slice into a 40-byte sha in place
|
// To40ByteSHA converts a 20-byte SHA in a 40-byte slice into a 40-byte sha in place
|
||||||
// without allocations. This is at least 100x quicker that hex.EncodeToString
|
// without allocations. This is at least 100x quicker that hex.EncodeToString
|
||||||
// NB This requires that sha is a 40-byte slice
|
// NB This requires that sha is a 40-byte slice
|
||||||
func to40ByteSHA(sha []byte) []byte {
|
func To40ByteSHA(sha []byte) []byte {
|
||||||
for i := 19; i >= 0; i-- {
|
for i := 19; i >= 0; i-- {
|
||||||
v := sha[i]
|
v := sha[i]
|
||||||
vhi, vlo := v>>4, v&0x0f
|
vhi, vlo := v>>4, v&0x0f
|
||||||
|
|
|
@ -300,7 +300,7 @@ revListLoop:
|
||||||
commits[0] = string(commitID)
|
commits[0] = string(commitID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
treeID = to40ByteSHA(treeID)
|
treeID = To40ByteSHA(treeID)
|
||||||
_, err = batchStdinWriter.Write(treeID)
|
_, err = batchStdinWriter.Write(treeID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -127,11 +127,12 @@ func FindLFSFile(repo *git.Repository, hash git.SHA1) ([]*LFSResult, error) {
|
||||||
case "tree":
|
case "tree":
|
||||||
var n int64
|
var n int64
|
||||||
for n < size {
|
for n < size {
|
||||||
mode, fname, sha, count, err := git.ParseTreeLine(batchReader, modeBuf, fnameBuf, workingShaBuf)
|
mode, fname, sha20byte, count, err := git.ParseTreeLine(batchReader, modeBuf, fnameBuf, workingShaBuf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
n += int64(count)
|
n += int64(count)
|
||||||
|
sha := git.To40ByteSHA(sha20byte)
|
||||||
if bytes.Equal(sha, []byte(hashStr)) {
|
if bytes.Equal(sha, []byte(hashStr)) {
|
||||||
result := LFSResult{
|
result := LFSResult{
|
||||||
Name: curPath + string(fname),
|
Name: curPath + string(fname),
|
||||||
|
|
|
@ -11,6 +11,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"io"
|
"io"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"code.gitea.io/gitea/modules/git"
|
"code.gitea.io/gitea/modules/git"
|
||||||
|
@ -78,6 +79,7 @@ loop:
|
||||||
_ = catFileBatchReader.CloseWithError(err)
|
_ = catFileBatchReader.CloseWithError(err)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
sha = strings.TrimSpace(sha)
|
||||||
// Throw away the blob
|
// Throw away the blob
|
||||||
if _, err := bufferedReader.ReadString(' '); err != nil {
|
if _, err := bufferedReader.ReadString(' '); err != nil {
|
||||||
_ = catFileBatchReader.CloseWithError(err)
|
_ = catFileBatchReader.CloseWithError(err)
|
||||||
|
|
Loading…
Reference in a new issue