github.com/pluswing/datasync@v1.1.1-0.20240218052257-9077f6fc4ae3/cmd/dump.go (about) 1 package cmd 2 3 import ( 4 "fmt" 5 "os" 6 "time" 7 8 "github.com/pluswing/datasync/compress" 9 "github.com/pluswing/datasync/data" 10 "github.com/pluswing/datasync/dump/dump_file" 11 "github.com/pluswing/datasync/dump/dump_mysql" 12 "github.com/pluswing/datasync/file" 13 "github.com/spf13/cobra" 14 ) 15 16 var message string 17 18 var dumpCmd = &cobra.Command{ 19 Use: "dump", 20 Short: "dump current data", 21 Long: "dump current data", 22 Run: func(cmd *cobra.Command, args []string) { 23 24 _, err := file.FindCurrentDir() 25 if err != nil { 26 fmt.Println("datasync.yaml not found.\nPlease run `datasync init`") 27 return 28 } 29 30 dumpDir, err := file.MakeTempDir() 31 cobra.CheckErr(err) 32 defer os.RemoveAll(dumpDir) 33 34 for _, target := range setting.Targets { 35 data.DispatchTarget(target, data.TargetFuncTable{ 36 Mysql: func(conf data.TargetMysqlType) { 37 dump_mysql.Dump(dump_mysql.MysqlDumpFile(dumpDir, conf), conf) 38 }, 39 File: func(conf data.TargetFileType) { 40 dump_file.Dump(dumpDir, conf) 41 }, 42 }) 43 } 44 45 zipFile := compress.Compress(dumpDir) 46 47 versionId, err := file.NewUUID() 48 cobra.CheckErr(err) 49 50 newVersion := data.VersionType{ 51 Id: versionId, 52 Time: time.Now().Unix(), 53 Message: message, 54 } 55 56 dir, err := file.DataDir() 57 cobra.CheckErr(err) 58 dest := newVersion.FileNameWithDir(dir) 59 err = file.MoveFile(zipFile, dest) 60 cobra.CheckErr(err) 61 62 local := file.ReadLocalDataSyncFile() 63 local.Histories = append(local.Histories, newVersion) 64 file.WriteLocalDataSyncFile(local) 65 file.UpdateVersionFile(versionId) 66 67 fmt.Printf("dump Succeeded. version_id = %s\n", versionId) 68 }, 69 } 70 71 func init() { 72 rootCmd.AddCommand(dumpCmd) 73 74 dumpCmd.Flags().StringVarP(&message, "message", "m", "", "commit mesasge") 75 dumpCmd.MarkFlagRequired("message") 76 }