mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-26 12:27:06 +00:00 
			
		
		
		
	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:
		| @@ -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) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Lunny Xiao
					Lunny Xiao