feat: Added initial support for .zip
All checks were successful
CI / build (push) Successful in 2m3s

This commit is contained in:
2024-09-02 22:37:38 +12:00
parent 1cef099a37
commit 3c5014e90b
3 changed files with 65 additions and 4 deletions

View File

@@ -1,6 +1,7 @@
package dump
import (
"archive/zip"
"fmt"
"github.com/charmbracelet/lipgloss"
"github.com/charmbracelet/log"
@@ -102,7 +103,7 @@ func (c *Client) Dump() error {
lipgloss.NewStyle().Foreground(color.Yellow).Render(fmt.Sprint(c.databaseName)),
)
_ = exec.Command(c.executable,
response, err := exec.Command(c.executable,
"--host="+c.hostname,
"--port="+strconv.Itoa(c.port),
"--user="+c.username,
@@ -111,8 +112,15 @@ func (c *Client) Dump() error {
"--no-data",
"--skip-triggers",
"--result-file", filepath.Join(c.storagePath, c.databaseName+"-schema.sql"),
c.databaseName).Run()
c.databaseName).CombinedOutput()
if err != nil {
fmt.Printf(
"%s mysqldump error: %s\n\r",
style.Failure(icon.Cross),
lipgloss.NewStyle().Foreground(color.Purple).Render(string(response)),
)
return err
}
removeDefiners(filepath.Join(c.storagePath, c.databaseName+"-schema.sql"))
fmt.Printf(
@@ -197,7 +205,8 @@ func removeDefiners(filename string) {
outputFile, err := os.OpenFile(filename+".new", os.O_WRONLY|os.O_CREATE, 0666)
_, _ = io.Copy(outputFile, engine.Wrap(inputFile))
_ = inputFile.Close()
_ = outputFile.Close()
err = util.MoveFile(filename+".new", filename)
if err != nil {
fmt.Printf(
@@ -237,3 +246,39 @@ func (c *Client) Combine() (string, error) {
}
return filepath.Join(c.storagePath, c.databaseName+"-backup.sql"), nil
}
func ZipFile(filename string) (string, error) {
fmt.Println("creating zip archive")
//Create a new zip archive and named archive.zip
archive, err := os.Create(util.FileNameWithoutExt(filename) + ".zip")
if err != nil {
panic(err)
// this is to catch errors if any
}
defer archive.Close()
fmt.Println("archive file created successfully....")
//Create a new zip writer
zipWriter := zip.NewWriter(archive)
fmt.Println("opening .sql file")
f1, err := os.Open(filename)
if err != nil {
panic(err)
}
defer f1.Close()
fmt.Println("adding file to archive..")
w1, err := zipWriter.Create(filename)
if err != nil {
panic(err)
}
if _, err := io.Copy(w1, f1); err != nil {
panic(err)
}
fmt.Println("closing archive")
zipWriter.Close()
f1.Close()
_ = os.Remove(filename)
return util.FileNameWithoutExt(filename) + ".zip", nil
}

View File

@@ -4,6 +4,8 @@ import (
"fmt"
"io"
"os"
"path/filepath"
"strings"
)
func MoveFile(src, dst string) error {
@@ -39,9 +41,18 @@ func MoveFile(src, dst string) error {
return fmt.Errorf("chmod error: %s", err)
}
//err = in.Close()
//if err != nil {
// return fmt.Errorf("closing file failed: %s", err)
//}
//time.Sleep(time.Second * 10)
err = os.Remove(src)
if err != nil {
return fmt.Errorf("failed removing original file: %s", err)
}
return nil
}
func FileNameWithoutExt(fileName string) string {
return strings.TrimSuffix(fileName, filepath.Ext(fileName))
}