github.com/pjdufour-truss/pop@v4.11.2-0.20190705085848-4c90b0ff4d5a+incompatible/soda/cmd/fix.go (about) 1 package cmd 2 3 import ( 4 "io/ioutil" 5 "os" 6 "path/filepath" 7 "strings" 8 9 "github.com/gobuffalo/pop/fix" 10 "github.com/spf13/cobra" 11 ) 12 13 var fixCmd = &cobra.Command{ 14 Use: "fix", 15 Aliases: []string{"f", "update"}, 16 Short: "Brings pop, soda, and fizz files in line with the latest APIs", 17 RunE: func(cmd *cobra.Command, args []string) error { 18 return filepath.Walk(migrationPath, func(path string, info os.FileInfo, _ error) error { 19 if info == nil { 20 return nil 21 } 22 return fixFizz(path) 23 }) 24 }, 25 } 26 27 func fixFizz(path string) error { 28 ext := strings.ToLower(filepath.Ext(path)) 29 if ext != ".fizz" { 30 return nil 31 } 32 33 b, err := ioutil.ReadFile(path) 34 if err != nil { 35 return err 36 } 37 38 content := string(b) 39 40 // Old anko format 41 fixed, err := fix.Anko(content) 42 if err != nil { 43 return err 44 } 45 if strings.TrimSpace(fixed) != strings.TrimSpace(content) { 46 content = fixed 47 } 48 49 // Rewrite migrations to use t.Timestamps() if necessary 50 fixed, err = fix.AutoTimestampsOff(content) 51 if err != nil { 52 return err 53 } 54 55 if strings.TrimSpace(fixed) != strings.TrimSpace(content) { 56 f, err := os.Create(path) 57 if err != nil { 58 return err 59 } 60 if _, err := f.WriteString(fixed); err != nil { 61 return err 62 } 63 if err := f.Close(); err != nil { 64 return err 65 } 66 } 67 return nil 68 } 69 70 func init() { 71 RootCmd.AddCommand(fixCmd) 72 }