81 lines
1.5 KiB
Go
81 lines
1.5 KiB
Go
|
package cmd
|
||
|
|
||
|
import (
|
||
|
"apkovl-cli/compression"
|
||
|
"embed"
|
||
|
"io"
|
||
|
"os"
|
||
|
|
||
|
log "github.com/s00500/env_logger"
|
||
|
)
|
||
|
|
||
|
//go:embed templates/*
|
||
|
var embeddedFS embed.FS
|
||
|
|
||
|
func prepareWorkdir() {
|
||
|
log.Info("Extracting APKovl ", apkovlFile, " to: ", workdir)
|
||
|
// Extract apkovl
|
||
|
err := os.RemoveAll(workdir)
|
||
|
log.MustFatal(err)
|
||
|
err = os.MkdirAll(workdir, 0755)
|
||
|
log.MustFatal(err)
|
||
|
r, err := os.Open(apkovlFile)
|
||
|
log.MustFatal(err)
|
||
|
err = compression.ExtractTarGz(r, workdir)
|
||
|
log.MustFatal(err)
|
||
|
}
|
||
|
|
||
|
func createOutput() {
|
||
|
log.Info("Compress Workdir (", workdir, "), outputting: ", apkovlFileOutput)
|
||
|
//Compress APKovl
|
||
|
err := compression.Compress(workdir, apkovlFileOutput)
|
||
|
log.MustFatal(err)
|
||
|
}
|
||
|
|
||
|
func copyEmbeddedFile(src, dst string) error {
|
||
|
srcfd, err := embeddedFS.Open(src)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
defer srcfd.Close()
|
||
|
|
||
|
dstfd, err := os.Create(dst)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
defer dstfd.Close()
|
||
|
|
||
|
if _, err = io.Copy(dstfd, srcfd); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
return nil // Do not change permissions
|
||
|
}
|
||
|
|
||
|
// copyFile copies a single file from src to dst
|
||
|
func copyFile(src, dst string) error {
|
||
|
var err error
|
||
|
var srcfd *os.File
|
||
|
var dstfd *os.File
|
||
|
var srcinfo os.FileInfo
|
||
|
|
||
|
if srcfd, err = os.Open(src); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
defer srcfd.Close()
|
||
|
|
||
|
if dstfd, err = os.Create(dst); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
defer dstfd.Close()
|
||
|
|
||
|
if _, err = io.Copy(dstfd, srcfd); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
if srcinfo, err = os.Stat(src); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
return os.Chmod(dst, srcinfo.Mode())
|
||
|
}
|