aboutsummaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2021-04-22 00:31:59 +0800
committerGitHub <noreply@github.com>2021-04-21 18:31:59 +0200
commit2255afffad4ff8173c73b7cec8dbd66d986eaf5c (patch)
tree92cd1967c9f264f1dd3016c512aea11fb37dfd39 /modules
parent9b8ffa1c7a886e3b550c64799463a5d4f965a2f7 (diff)
downloadgitea-2255afffad4ff8173c73b7cec8dbd66d986eaf5c.tar.gz
gitea-2255afffad4ff8173c73b7cec8dbd66d986eaf5c.zip
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>
Diffstat (limited to 'modules')
-rw-r--r--modules/git/batch_reader.go4
-rw-r--r--modules/git/commit_info_nogogit.go2
-rw-r--r--modules/git/pipeline/lfs_nogogit.go3
-rw-r--r--modules/lfs/pointer_scanner_nogogit.go2
4 files changed, 7 insertions, 4 deletions
diff --git a/modules/git/batch_reader.go b/modules/git/batch_reader.go
index 6014508b93..1905067cb4 100644
--- a/modules/git/batch_reader.go
+++ b/modules/git/batch_reader.go
@@ -149,10 +149,10 @@ headerLoop:
// constant hextable to help quickly convert between 20byte and 40byte hashes
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
// 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-- {
v := sha[i]
vhi, vlo := v>>4, v&0x0f
diff --git a/modules/git/commit_info_nogogit.go b/modules/git/commit_info_nogogit.go
index b844468c8c..f14b7b8291 100644
--- a/modules/git/commit_info_nogogit.go
+++ b/modules/git/commit_info_nogogit.go
@@ -300,7 +300,7 @@ revListLoop:
commits[0] = string(commitID)
}
}
- treeID = to40ByteSHA(treeID)
+ treeID = To40ByteSHA(treeID)
_, err = batchStdinWriter.Write(treeID)
if err != nil {
return nil, err
diff --git a/modules/git/pipeline/lfs_nogogit.go b/modules/git/pipeline/lfs_nogogit.go
index f6faa3a48a..79f7528d33 100644
--- a/modules/git/pipeline/lfs_nogogit.go
+++ b/modules/git/pipeline/lfs_nogogit.go
@@ -127,11 +127,12 @@ func FindLFSFile(repo *git.Repository, hash git.SHA1) ([]*LFSResult, error) {
case "tree":
var n int64
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 {
return nil, err
}
n += int64(count)
+ sha := git.To40ByteSHA(sha20byte)
if bytes.Equal(sha, []byte(hashStr)) {
result := LFSResult{
Name: curPath + string(fname),
diff --git a/modules/lfs/pointer_scanner_nogogit.go b/modules/lfs/pointer_scanner_nogogit.go
index 28d4afba61..b5654d5de7 100644
--- a/modules/lfs/pointer_scanner_nogogit.go
+++ b/modules/lfs/pointer_scanner_nogogit.go
@@ -11,6 +11,7 @@ import (
"context"
"io"
"strconv"
+ "strings"
"sync"
"code.gitea.io/gitea/modules/git"
@@ -78,6 +79,7 @@ loop:
_ = catFileBatchReader.CloseWithError(err)
break
}
+ sha = strings.TrimSpace(sha)
// Throw away the blob
if _, err := bufferedReader.ReadString(' '); err != nil {
_ = catFileBatchReader.CloseWithError(err)