github.com/keysonzzz/kmg@v0.0.0-20151121023212-05317bfd7d39/archive/kmgTar/kmgTar.go (about) 1 package kmgTar 2 3 import ( 4 "archive/tar" 5 "compress/gzip" 6 "io" 7 "os" 8 "path/filepath" 9 ) 10 11 //package a directory into a tar format. 12 func PackageDirectoryTar(root string, inW io.Writer) (err error) { 13 tarW := tar.NewWriter(inW) 14 defer tarW.Close() 15 err = filepath.Walk(root, func(path string, info os.FileInfo, inErr error) (err error) { 16 if inErr != nil { 17 return inErr 18 } 19 h, err := tar.FileInfoHeader(info, "") 20 if err != nil { 21 return 22 } 23 relPath, err := filepath.Rel(root, path) 24 if err != nil { 25 return 26 } 27 h.Name = filepath.ToSlash(relPath) 28 err = tarW.WriteHeader(h) 29 if err != nil { 30 return 31 } 32 if info.IsDir() { 33 return 34 } 35 f, err := os.Open(path) 36 if err != nil { 37 return 38 } 39 defer f.Close() 40 _, err = io.Copy(tarW, f) 41 if err != nil { 42 return 43 } 44 return 45 }) 46 return 47 } 48 49 //package a directory into a tar.gz format. 50 func PackageDirectoryTarGz(root string, w io.Writer) (err error) { 51 gzipW := gzip.NewWriter(w) 52 defer gzipW.Close() 53 err = PackageDirectoryTar(root, gzipW) 54 return 55 }