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