@@ -23,24 +23,24 @@ import (
23
23
func SearchPointerBlobs (ctx context.Context , repo * git.Repository , pointerChan chan <- PointerBlob , errChan chan <- error ) {
24
24
basePath := repo .Path
25
25
26
- fail := func (err error ) {
27
- errChan <- err
28
- close (pointerChan )
29
- close (errChan )
26
+ // We will need to run batch-check on all the objects in the repository
27
+ // in Git 2.6.0+ we can use `git cat-file --batch-check --batch-all-objects`
28
+ // However in earlier versions we'll need to use rev-list to get the objects.
29
+ gitHasBatchCheckAllObjects := git .CheckGitVersionAtLeast ("2.6.0" ) == nil
30
+
31
+ numPipesRequired := 3
32
+ if ! gitHasBatchCheckAllObjects {
33
+ numPipesRequired += 2
30
34
}
31
35
32
- pipes , err := git .NewPipePairs (3 )
36
+ pipes , err := git .NewPipePairs (numPipesRequired )
33
37
if err != nil {
34
- fail (err )
38
+ errChan <- err
39
+ close (pointerChan )
40
+ close (errChan )
35
41
return
36
42
}
37
-
38
- closeAll := func (err error ) {
39
- for _ , closer := range pipes {
40
- _ = closer .CloseWithError (err )
41
- }
42
- }
43
- defer closeAll (nil )
43
+ defer pipes .Close ()
44
44
45
45
catFileCheckReader , catFileCheckWriter := pipes [0 ].ReaderWriter ()
46
46
shasToBatchReader , shasToBatchWriter := pipes [1 ].ReaderWriter ()
@@ -62,20 +62,9 @@ func SearchPointerBlobs(ctx context.Context, repo *git.Repository, pointerChan c
62
62
go pipeline .BlobsLessThan1024FromCatFileBatchCheck (catFileCheckReader , shasToBatchWriter , & wg )
63
63
64
64
// 1. Run batch-check on all objects in the repository
65
- if git .CheckGitVersionAtLeast ("2.6.0" ) != nil {
66
-
67
- morePipes , err := git .NewPipePairs (2 )
68
- if err != nil {
69
- wg .Done ()
70
- closeAll (err )
71
- wg .Wait ()
72
- fail (err )
73
- return
74
- }
75
-
76
- revListReader , revListWriter := morePipes [0 ].ReaderWriter ()
77
- shasToCheckReader , shasToCheckWriter := morePipes [1 ].ReaderWriter ()
78
- pipes = append (pipes , morePipes ... )
65
+ if ! gitHasBatchCheckAllObjects {
66
+ revListReader , revListWriter := pipes [3 ].ReaderWriter ()
67
+ shasToCheckReader , shasToCheckWriter := pipes [4 ].ReaderWriter ()
79
68
80
69
wg .Add (2 )
81
70
go pipeline .CatFileBatchCheck (ctx , shasToCheckReader , catFileCheckWriter , & wg , basePath )
0 commit comments