99)
1010
1111const (
12- // How far back in the sorted list to search for deltas. 10 is
13- // the default in command line git.
14- deltaWindowSize = 10
1512 // deltas based on deltas, how many steps we can do.
1613 // 50 is the default value used in JGit
1714 maxDepth = int64 (50 )
@@ -35,7 +32,7 @@ func newDeltaSelector(s storer.EncodedObjectStorer) *deltaSelector {
3532// creating deltas if it's suitable, using an specific internal logic
3633func (dw * deltaSelector ) ObjectsToPack (
3734 hashes []plumbing.Hash ,
38- skipCompression bool ,
35+ packWindow uint ,
3936 statusChan plumbing.StatusChan ,
4037) ([]* ObjectToPack , error ) {
4138 update := plumbing.StatusUpdate {
@@ -44,12 +41,12 @@ func (dw *deltaSelector) ObjectsToPack(
4441 }
4542 statusChan .SendUpdate (update )
4643
47- otp , err := dw .objectsToPack (hashes , skipCompression , statusChan , update )
44+ otp , err := dw .objectsToPack (hashes , packWindow , statusChan , update )
4845 if err != nil {
4946 return nil , err
5047 }
5148
52- if skipCompression {
49+ if packWindow == 0 {
5350 return otp , nil
5451 }
5552
@@ -87,7 +84,7 @@ func (dw *deltaSelector) ObjectsToPack(
8784 objs := objs
8885 wg .Add (1 )
8986 go func () {
90- if walkErr := dw .walk (objs , statusChan , & update , & updateMutex ); walkErr != nil {
87+ if walkErr := dw .walk (objs , packWindow , statusChan , & update , & updateMutex ); walkErr != nil {
9188 once .Do (func () {
9289 err = walkErr
9390 })
@@ -106,15 +103,15 @@ func (dw *deltaSelector) ObjectsToPack(
106103
107104func (dw * deltaSelector ) objectsToPack (
108105 hashes []plumbing.Hash ,
109- skipCompression bool ,
106+ packWindow uint ,
110107 statusChan plumbing.StatusChan ,
111108 update plumbing.StatusUpdate ,
112109) ([]* ObjectToPack , error ) {
113110 var objectsToPack []* ObjectToPack
114111 for _ , h := range hashes {
115112 var o plumbing.EncodedObject
116113 var err error
117- if skipCompression {
114+ if packWindow == 0 {
118115 o , err = dw .encodedObject (h )
119116 } else {
120117 o , err = dw .encodedDeltaObject (h )
@@ -134,7 +131,7 @@ func (dw *deltaSelector) objectsToPack(
134131 statusChan .SendUpdateIfPossible (update )
135132 }
136133
137- if skipCompression {
134+ if packWindow == 0 {
138135 return objectsToPack , nil
139136 }
140137
@@ -259,6 +256,7 @@ func (dw *deltaSelector) sort(objectsToPack []*ObjectToPack) {
259256
260257func (dw * deltaSelector ) walk (
261258 objectsToPack []* ObjectToPack ,
259+ packWindow uint ,
262260 statusChan plumbing.StatusChan ,
263261 update * plumbing.StatusUpdate ,
264262 updateMutex * sync.Mutex ,
@@ -288,7 +286,7 @@ func (dw *deltaSelector) walk(
288286 continue
289287 }
290288
291- for j := i - 1 ; j >= 0 && i - j < deltaWindowSize ; j -- {
289+ for j := i - 1 ; j >= 0 && i - j < int ( packWindow ) ; j -- {
292290 base := objectsToPack [j ]
293291 // Objects must use only the same type as their delta base.
294292 // Since objectsToPack is sorted by type and size, once we find
0 commit comments