@@ -173,21 +173,31 @@ func (rl *ResumableLayer) DownloadAndDecompress(updates chan<- v1.Update) (bool,
173173 }
174174 defer compressedFile .Close ()
175175
176+ // Try to decompress - if it fails, the data might already be uncompressed
176177 gzipReader , err := gzip .NewReader (compressedFile )
178+ var reader io.Reader
177179 if err != nil {
178- return false , v1.Hash {}, fmt .Errorf ("create gzip reader: %w" , err )
180+ // Data is not gzipped, use it directly
181+ // Need to reopen the file since gzip.NewReader consumed some bytes
182+ compressedFile .Close ()
183+ compressedFile , err = os .Open (compressedIncompletePath )
184+ if err != nil {
185+ return false , v1.Hash {}, fmt .Errorf ("reopen for direct read: %w" , err )
186+ }
187+ reader = compressedFile
188+ } else {
189+ defer gzipReader .Close ()
190+ reader = gzipReader
179191 }
180- defer gzipReader .Close ()
181192
182193 // Wrap with progress if provided
183- var reader io.Reader = gzipReader
184194 if updates != nil {
185- reader = progress .NewReader (gzipReader , updates )
195+ reader = progress .NewReader (reader , updates )
186196 }
187197
188- // Write decompressed data
198+ // Write data
189199 if err := rl .store .WriteBlob (diffID , reader ); err != nil {
190- return false , v1.Hash {}, fmt .Errorf ("write decompressed : %w" , err )
200+ return false , v1.Hash {}, fmt .Errorf ("write blob : %w" , err )
191201 }
192202
193203 // Clean up compressed file
0 commit comments