github.com/reggieriser/pop@v4.13.1+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  }