forked from laher/debgo-v0.2
-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathwriter.go
68 lines (59 loc) · 1.78 KB
/
writer.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/*
Copyright 2013 Am Laher
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package targz
import (
"archive/tar"
"compress/gzip"
"fmt"
"io"
"os"
)
// Writer encapsulates the tar, gz and file operations of a .tar.gz file.
type Writer struct {
*tar.Writer // Tar writer (wraps the GzipWriter)
//Filename string // Filename
WrappedWriter io.Writer // File writer
GzipWriter *gzip.Writer // Gzip writer (wraps the WrappedWriter)
}
// Close closes all 3 writers.
// Returns the first error
func (tgzw *Writer) Close() error {
err1 := tgzw.Writer.Close()
err2 := tgzw.GzipWriter.Close()
if err1 != nil {
return fmt.Errorf("Error closing Tar Writer %v", err1)
}
if err2 != nil {
return fmt.Errorf("Error closing Gzip Writer %v", err2)
}
return nil
}
// NewWriterFromFile is a factory for Writer
func NewWriterFromFile(archiveFilename string) (*Writer, error) {
fw, err := os.Create(archiveFilename)
if err != nil {
return nil, err
}
tgzw := NewWriter(fw)
return tgzw, err
}
// NewWriter is a factory for Writer.
// It wraps the io.Writer with a Tar writer and Gzip writer
func NewWriter(w io.Writer) *Writer {
tgzw := &Writer{WrappedWriter: w}
// gzip writer
tgzw.GzipWriter = gzip.NewWriter(w)
// tar writer
tgzw.Writer = tar.NewWriter(tgzw.GzipWriter)
return tgzw
}