mirror of
https://github.com/sbrow/envr.git
synced 2025-12-29 15:47:38 -05:00
85 lines
1.7 KiB
Go
85 lines
1.7 KiB
Go
package cmd
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
|
|
"github.com/mattn/go-isatty"
|
|
"github.com/olekukonko/tablewriter"
|
|
"github.com/sbrow/envr/app"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var syncCmd = &cobra.Command{
|
|
Use: "sync",
|
|
Short: "Update or restore your env backups",
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
db, err := app.Open()
|
|
if err != nil {
|
|
return err
|
|
} else {
|
|
defer db.Close()
|
|
files, err := db.List()
|
|
|
|
if err != nil {
|
|
return err
|
|
} else {
|
|
type syncResult struct {
|
|
Path string `json:"path"`
|
|
Status string `json:"status"`
|
|
}
|
|
var results []syncResult
|
|
|
|
for _, file := range files {
|
|
// Syncronize the filesystem with the database.
|
|
changed, err := file.Sync()
|
|
|
|
var status string
|
|
switch changed {
|
|
case app.BackedUp:
|
|
status = "Backed Up"
|
|
if err := db.Insert(file); err != nil {
|
|
return err
|
|
}
|
|
case app.Restored:
|
|
status = "Restored"
|
|
case app.Error:
|
|
if err == nil {
|
|
panic("err cannot be nil when Sync returns Error")
|
|
}
|
|
status = err.Error()
|
|
case app.Noop:
|
|
status = "OK"
|
|
default:
|
|
panic("Unknown result")
|
|
}
|
|
|
|
results = append(results, syncResult{
|
|
Path: file.Path,
|
|
Status: status,
|
|
})
|
|
}
|
|
|
|
if isatty.IsTerminal(os.Stdout.Fd()) {
|
|
table := tablewriter.NewWriter(os.Stdout)
|
|
table.Header([]string{"File", "Status"})
|
|
|
|
for _, result := range results {
|
|
table.Append([]string{result.Path, result.Status})
|
|
}
|
|
table.Render()
|
|
} else {
|
|
encoder := json.NewEncoder(os.Stdout)
|
|
return encoder.Encode(results)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
}
|
|
},
|
|
}
|
|
|
|
func init() {
|
|
rootCmd.AddCommand(syncCmd)
|
|
}
|