@@ -25,10 +25,13 @@ import (
25
25
)
26
26
27
27
// ExtractTarGz extracts a *.tar.gz compressed archive and moves its content to destDir.
28
- func ExtractTarGz (gzipStream io.Reader , destDir string ) error {
28
+ // Returns a slice containing the full path of the extracted files.
29
+ func ExtractTarGz (gzipStream io.Reader , destDir string ) ([]string , error ) {
30
+ var files []string
31
+
29
32
uncompressedStream , err := gzip .NewReader (gzipStream )
30
33
if err != nil {
31
- return err
34
+ return nil , err
32
35
}
33
36
34
37
tarReader := tar .NewReader (uncompressedStream )
@@ -41,30 +44,32 @@ func ExtractTarGz(gzipStream io.Reader, destDir string) error {
41
44
}
42
45
43
46
if err != nil {
44
- return err
47
+ return nil , err
45
48
}
46
49
47
50
switch header .Typeflag {
48
51
case tar .TypeDir :
49
- return fmt .Errorf ("unexepected dir inside the archive, expected to find only files without any tree structure" )
52
+ return nil , fmt .Errorf ("unexepected dir inside the archive, expected to find only files without any tree structure" )
50
53
case tar .TypeReg :
51
- outFile , err := os .Create (filepath .Clean (filepath .Join (destDir , filepath .Clean (header .Name ))))
54
+ f := filepath .Join (destDir , filepath .Clean (header .Name ))
55
+ outFile , err := os .Create (filepath .Clean (f ))
52
56
if err != nil {
53
- return err
57
+ return nil , err
54
58
}
55
59
if err = copyInChunks (outFile , tarReader ); err != nil {
56
- return err
60
+ return nil , err
57
61
}
58
62
if err = outFile .Close (); err != nil {
59
- return err
63
+ return nil , err
60
64
}
65
+ files = append (files , f )
61
66
62
67
default :
63
- return fmt .Errorf ("extractTarGz: uknown type: %b in %s" , header .Typeflag , header .Name )
68
+ return nil , fmt .Errorf ("extractTarGz: uknown type: %b in %s" , header .Typeflag , header .Name )
64
69
}
65
70
}
66
71
67
- return nil
72
+ return files , nil
68
73
}
69
74
70
75
func copyInChunks (dst io.Writer , src io.Reader ) error {
0 commit comments