| 1165 | } |
| 1166 | |
| 1167 | func tarGz(out string, files []archiveFile) { |
| 1168 | fd, err := os.Create(out) |
| 1169 | if err != nil { |
| 1170 | log.Fatal(err) |
| 1171 | } |
| 1172 | |
| 1173 | gw, err := gzip.NewWriterLevel(fd, gzip.BestCompression) |
| 1174 | if err != nil { |
| 1175 | log.Fatal(err) |
| 1176 | } |
| 1177 | tw := tar.NewWriter(gw) |
| 1178 | |
| 1179 | for _, f := range files { |
| 1180 | sf, err := os.Open(f.src) |
| 1181 | if err != nil { |
| 1182 | log.Fatal(err) |
| 1183 | } |
| 1184 | |
| 1185 | info, err := sf.Stat() |
| 1186 | if err != nil { |
| 1187 | log.Fatal(err) |
| 1188 | } |
| 1189 | h := &tar.Header{ |
| 1190 | Name: f.dst, |
| 1191 | Size: info.Size(), |
| 1192 | Mode: int64(info.Mode()), |
| 1193 | ModTime: info.ModTime(), |
| 1194 | } |
| 1195 | |
| 1196 | err = tw.WriteHeader(h) |
| 1197 | if err != nil { |
| 1198 | log.Fatal(err) |
| 1199 | } |
| 1200 | _, err = io.Copy(tw, sf) |
| 1201 | if err != nil { |
| 1202 | log.Fatal(err) |
| 1203 | } |
| 1204 | sf.Close() |
| 1205 | } |
| 1206 | |
| 1207 | err = tw.Close() |
| 1208 | if err != nil { |
| 1209 | log.Fatal(err) |
| 1210 | } |
| 1211 | err = gw.Close() |
| 1212 | if err != nil { |
| 1213 | log.Fatal(err) |
| 1214 | } |
| 1215 | err = fd.Close() |
| 1216 | if err != nil { |
| 1217 | log.Fatal(err) |
| 1218 | } |
| 1219 | } |
| 1220 | |
| 1221 | func zipFile(out string, files []archiveFile) { |
| 1222 | fd, err := os.Create(out) |