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. */