mirror of https://github.com/go-gitea/gitea.git
* 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> * Remove space Co-authored-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
parent
a719311f6d
commit
c0869c295a
|
@ -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),
|
||||||
|
|
|
@ -504,6 +504,7 @@ func createPointerResultsFromCatFileBatch(catFileBatchReader *io.PipeReader, wg
|
||||||
_ = 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 New Issue