Mercurial > mercurial > hgweb_golang.cgi
diff src/ut/lu/lu.go @ 17:72ce457fb99d
ut: bug fix.
author | pyon@macmini |
---|---|
date | Wed, 20 Jun 2018 06:01:58 +0900 |
parents | 38b64afbaf79 |
children | 45ca03520eea |
line wrap: on
line diff
--- a/src/ut/lu/lu.go Sun Jun 17 20:29:45 2018 +0900 +++ b/src/ut/lu/lu.go Wed Jun 20 06:01:58 2018 +0900 @@ -81,6 +81,43 @@ } } +/* tar cvfz: done. */ +func Tgz( tgzfile string, files []string ) { + + tgz, err := os.Create( tgzfile ) + if err != nil { + log.Fatal( err ) + } + defer tgz.Close() + + gw := gzip.NewWriter( tgz ) + defer gw.Close() + tw := tar.NewWriter( gw ) + defer tw.Close() + + for _, file := range fullpath( files ) { + f, err := os.Open( file ) + if err != nil { + log.Fatal( err ) + } + + stat, _ := f.Stat() + header := new( tar.Header ) + header.Name = file + header.Size = stat.Size() + header.Mode = int64( stat.Mode() ) + header.ModTime = stat.ModTime() + + if err := tw.WriteHeader( header ); err != nil { + log.Fatal( err ) + } + if _, err := io.Copy( tw, f ); err != nil { + log.Fatal( err ) + } + f.Close() + } +} + /* tar xvfz: done. */ func UnTgz( files []string ) { @@ -128,7 +165,24 @@ log.Fatal( err ) } } +} +func fullpath( files []string ) []string { + var buf []string + for _, f := range files { + fi, _ := os.Stat( f ) + if fi.IsDir() { + filepath.Walk( f, func( path string, info os.FileInfo, err error ) error { + if !info.IsDir() { + buf = append( buf, path ) + } + return nil + } ) + } else { + buf = append( buf, f ) + } + } + return buf } /* tac: done. */