| @ -0,0 +1,129 @@ | |||||
| package Archive | |||||
| import ( | |||||
| "archive/tar" | |||||
| "compress/gzip" | |||||
| "io" | |||||
| "os" | |||||
| "path/filepath" | |||||
| "strings" | |||||
| ) | |||||
| func Gzip(source, target string) error { | |||||
| var ( | |||||
| reader, writer *os.File | |||||
| archiver *gzip.Writer | |||||
| filename string | |||||
| e error | |||||
| ) | |||||
| reader, e = os.Open(source) | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| //filename = filepath.Base(source) | |||||
| //target = filepath.Join(target, fmt.Sprintf("%s.gz", filename)) | |||||
| writer, e = os.Create(target) | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| defer writer.Close() | |||||
| archiver = gzip.NewWriter(writer) | |||||
| archiver.Name = filename | |||||
| defer archiver.Close() | |||||
| _, e = io.Copy(archiver, reader) | |||||
| return e | |||||
| } | |||||
| func Tar(source, target string) error { | |||||
| var ( | |||||
| tarfile, file *os.File | |||||
| tarball *tar.Writer | |||||
| info os.FileInfo | |||||
| header *tar.Header | |||||
| e error | |||||
| ) | |||||
| tarfile, e = os.Create(target) | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| defer tarfile.Close() | |||||
| tarball = tar.NewWriter(tarfile) | |||||
| defer tarball.Close() | |||||
| info, e = os.Stat(source) | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| var baseDir string | |||||
| if info.IsDir() { | |||||
| baseDir = filepath.Base(source) | |||||
| } | |||||
| return filepath.Walk(source, | |||||
| func(path string, info os.FileInfo, e error) error { | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| header, e = tar.FileInfoHeader(info, info.Name()) | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| if baseDir != "" { | |||||
| header.Name = filepath.Join( | |||||
| baseDir, | |||||
| strings.TrimPrefix( | |||||
| strings.Join(strings.Split(path, "/")[1:], "/"), | |||||
| source, | |||||
| ), | |||||
| ) | |||||
| } | |||||
| e = tarball.WriteHeader(header) | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| if info.IsDir() { | |||||
| return nil | |||||
| } | |||||
| file, e = os.Open(path) | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| defer file.Close() | |||||
| _, e = io.Copy(tarball, file) | |||||
| return e | |||||
| }) | |||||
| } | |||||
| func TarGzip(source, target string) error { | |||||
| var ( | |||||
| tarPath string = strings.ReplaceAll(target, ".gz", "") | |||||
| e error | |||||
| ) | |||||
| e = Tar(source, tarPath) | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| e = Gzip(tarPath, target) | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| return os.Remove(tarPath) | |||||
| } | |||||
| @ -0,0 +1,111 @@ | |||||
| package Archive | |||||
| import ( | |||||
| "archive/tar" | |||||
| "compress/gzip" | |||||
| "io" | |||||
| "io/fs" | |||||
| "os" | |||||
| "path/filepath" | |||||
| "strings" | |||||
| ) | |||||
| func UnGzip(source, target string) error { | |||||
| var ( | |||||
| reader, writer *os.File | |||||
| archive *gzip.Reader | |||||
| e error | |||||
| ) | |||||
| reader, e = os.Open(source) | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| defer reader.Close() | |||||
| archive, e = gzip.NewReader(reader) | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| defer archive.Close() | |||||
| target = filepath.Join(target, archive.Name) | |||||
| writer, e = os.Create(target) | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| defer writer.Close() | |||||
| _, e = io.Copy(writer, archive) | |||||
| return e | |||||
| } | |||||
| func Untar(tarball, target string) error { | |||||
| var ( | |||||
| reader *os.File | |||||
| tarReader *tar.Reader | |||||
| header *tar.Header | |||||
| info fs.FileInfo | |||||
| file *os.File | |||||
| path string | |||||
| e error | |||||
| ) | |||||
| reader, e = os.Open(tarball) | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| defer reader.Close() | |||||
| tarReader = tar.NewReader(reader) | |||||
| for { | |||||
| header, e = tarReader.Next() | |||||
| if e == io.EOF { | |||||
| break | |||||
| } | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| path = "/" + strings.Join(strings.Split(header.Name, "/")[1:], "/") | |||||
| info = header.FileInfo() | |||||
| if info.IsDir() { | |||||
| e = os.MkdirAll(path, info.Mode()) | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| continue | |||||
| } | |||||
| file, e = os.OpenFile(path, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, info.Mode()) | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| defer file.Close() | |||||
| _, e = io.Copy(file, tarReader) | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| } | |||||
| return nil | |||||
| } | |||||
| func UntarGzip(source, target string) error { | |||||
| var ( | |||||
| tarPath string = strings.ReplaceAll(source, ".gz", "") | |||||
| e error | |||||
| ) | |||||
| e = UnGzip(source, tarPath) | |||||
| if e != nil { | |||||
| return e | |||||
| } | |||||
| return Untar(tarPath, target) | |||||
| } | |||||
| @ -0,0 +1,24 @@ | |||||
| package Database | |||||
| import ( | |||||
| "database/sql" | |||||
| "log" | |||||
| _ "github.com/mattn/go-sqlite3" | |||||
| ) | |||||
| var ( | |||||
| DB *sql.DB | |||||
| ) | |||||
| func init() { | |||||
| var e error | |||||
| DB, e = sql.Open("sqlite3", "./foo.db") | |||||
| if e != nil { | |||||
| panic(e) | |||||
| } | |||||
| } | |||||
| func InitDB() { | |||||
| log.Println("Initialising Database...") | |||||
| } | |||||
| @ -0,0 +1,13 @@ | |||||
| package main | |||||
| import ( | |||||
| "fmt" | |||||
| "PackageManager/Archive" | |||||
| ) | |||||
| func main() { | |||||
| //e := Archive.TarGzip("/tmp/test", "/tmp/test.tar.gz") | |||||
| e := Archive.UntarGzip("/tmp/test.tar.gz", "/tmp/test") | |||||
| fmt.Println(e) | |||||
| } | |||||