github.com/gobuffalo/buffalo-cli/v2@v2.0.0-alpha.15.0.20200919213536-a7350c8e6799/cli/internal/plugins/golang/mainfix/cmd.go (about)

     1  package mainfix
     2  
     3  import (
     4  	"context"
     5  	"os"
     6  	"path"
     7  	"path/filepath"
     8  
     9  	"github.com/gobuffalo/here"
    10  )
    11  
    12  // Cmd takes care of moving existing main.go into
    13  // cmd/[name]/main.go where its expected by the build command.
    14  type Cmd struct{}
    15  
    16  func (*Cmd) PluginName() string {
    17  	return "main/fixer"
    18  }
    19  
    20  func (fixer *Cmd) Fix(ctx context.Context, root string, args []string) error {
    21  	info, err := here.Dir(root)
    22  	if err != nil {
    23  		return err
    24  	}
    25  
    26  	fp := filepath.Join(root, "cmd", path.Base(info.Module.Path))
    27  	if _, err := os.Stat(filepath.Join(fp, "main.go")); err == nil {
    28  		return nil
    29  	}
    30  
    31  	if _, err := os.Stat(fp); err != nil {
    32  		err := os.MkdirAll(fp, 0777)
    33  		if err != nil {
    34  			return err
    35  		}
    36  	}
    37  
    38  	mainPath := filepath.Join(root, "main.go")
    39  	if _, err := os.Stat(mainPath); err == nil {
    40  		err := os.Rename(mainPath, filepath.Join(fp, "main.go"))
    41  		if err != nil {
    42  			return err
    43  		}
    44  	}
    45  
    46  	return nil
    47  }