@ -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) | |||||
} |