@@ -51,84 +51,27 @@ func (b *GobBackend) compressedPath() string {
5151 return b .Path + ".gz"
5252}
5353
54- func (b * GobBackend ) Open () ( err error ) {
54+ func (b * GobBackend ) Open () error {
5555 b .wasOpened = true
5656
57- // Uncompress gzipped file to regular location if it exists
58- f , err := os .Open (b .compressedPath ())
59- if errors .Is (err , fs .ErrNotExist ) {
60- return nil
61- } else if err != nil {
62- return err
63- }
64- defer f .Close ()
65-
66- fout , err := os .OpenFile (b .Path , os .O_WRONLY | os .O_CREATE , 0644 )
67- if err != nil {
68- return err
69- }
70- defer fout .Close ()
71-
72- zr , err := gzip .NewReader (f )
73- if err != nil {
74- return err
75- }
76-
77- w := bufio .NewWriter (fout )
78- _ , err = io .Copy (w , zr )
79- if err != nil {
80- return err
81- }
82-
83- err = zr .Close ()
84- if err != nil {
85- return err
86- }
87-
88- err = w .Flush ()
57+ err := uncompress (b .compressedPath (), b .Path )
8958 if err != nil {
9059 return err
9160 }
9261
9362 return nil
9463}
9564
96- func (b * GobBackend ) Close () ( err error ) {
65+ func (b * GobBackend ) Close () error {
9766 if b .isDirty {
98- // Compress file and save to gzipped location
99- f , err := os .Open (b .Path )
100- if errors .Is (err , fs .ErrNotExist ) {
101- return nil
102- } else if err != nil {
103- return err
104- }
105- defer f .Close ()
106-
107- fout , err := os .OpenFile (b .compressedPath (), os .O_WRONLY | os .O_CREATE , 0644 )
108- if err != nil {
109- return err
110- }
111- defer fout .Close ()
112-
113- r := bufio .NewReader (f )
114- zw , err := gzip .NewWriterLevel (fout , gzip .BestSpeed )
115- if err != nil {
116- return err
117- }
118-
119- _ , err = io .Copy (zw , r )
120- if err != nil {
121- return err
122- }
123-
124- err = zw .Close ()
67+ err := compress (b .Path , b .compressedPath ())
12568 if err != nil {
12669 return err
12770 }
12871 }
12972
13073 // Remove uncompressed file
131- err = os .RemoveAll (b .Path )
74+ err : = os .RemoveAll (b .Path )
13275 if err != nil {
13376 return err
13477 }
@@ -320,3 +263,78 @@ func GobCacheDir(prefix string, gitRootPath string) string {
320263func GobCacheFilename (stateHash string ) string {
321264 return fmt .Sprintf ("%s.gobs" , stateHash )
322265}
266+
267+ // Uncompress gzipped file to regular location if it exists
268+ func uncompress (sourcePath string , targetPath string ) error {
269+ f , err := os .Open (sourcePath )
270+ if errors .Is (err , fs .ErrNotExist ) {
271+ return nil
272+ } else if err != nil {
273+ return err
274+ }
275+ defer f .Close ()
276+
277+ fout , err := os .OpenFile (targetPath , os .O_WRONLY | os .O_CREATE , 0644 )
278+ if err != nil {
279+ return err
280+ }
281+ defer fout .Close ()
282+
283+ zr , err := gzip .NewReader (f )
284+ if err != nil {
285+ return err
286+ }
287+
288+ w := bufio .NewWriter (fout )
289+ _ , err = io .Copy (w , zr )
290+ if err != nil {
291+ return err
292+ }
293+
294+ err = zr .Close ()
295+ if err != nil {
296+ return err
297+ }
298+
299+ err = w .Flush ()
300+ if err != nil {
301+ return err
302+ }
303+
304+ return nil
305+ }
306+
307+ // Compress file and save to gzipped location
308+ func compress (sourcePath string , targetPath string ) error {
309+ f , err := os .Open (sourcePath )
310+ if errors .Is (err , fs .ErrNotExist ) {
311+ return nil
312+ } else if err != nil {
313+ return err
314+ }
315+ defer f .Close ()
316+
317+ fout , err := os .OpenFile (targetPath , os .O_WRONLY | os .O_CREATE , 0644 )
318+ if err != nil {
319+ return err
320+ }
321+ defer fout .Close ()
322+
323+ r := bufio .NewReader (f )
324+ zw , err := gzip .NewWriterLevel (fout , gzip .BestSpeed )
325+ if err != nil {
326+ return err
327+ }
328+
329+ _ , err = io .Copy (zw , r )
330+ if err != nil {
331+ return err
332+ }
333+
334+ err = zw .Close ()
335+ if err != nil {
336+ return err
337+ }
338+
339+ return nil
340+ }
0 commit comments