feat: support force to overwrite existing project with --force/-f flag in hrp startproject

This commit is contained in:
debugtalk
2022-04-24 21:19:48 +08:00
parent 85476f27f2
commit ce60dba5f9
12 changed files with 32 additions and 26 deletions

View File

@@ -31,7 +31,7 @@ var scaffoldCmd = &cobra.Command{
pluginType = scaffold.Py // default
}
err := scaffold.CreateScaffold(args[0], pluginType)
err := scaffold.CreateScaffold(args[0], pluginType, force)
if err != nil {
log.Error().Err(err).Msg("create scaffold project failed")
os.Exit(1)
@@ -45,10 +45,12 @@ var (
ignorePlugin bool
genPythonPlugin bool
genGoPlugin bool
force bool
)
func init() {
rootCmd.AddCommand(scaffoldCmd)
scaffoldCmd.Flags().BoolVarP(&force, "force", "f", false, "force to overwrite existing project")
scaffoldCmd.Flags().BoolVar(&genPythonPlugin, "py", true, "generate hashicorp python plugin")
scaffoldCmd.Flags().BoolVar(&genGoPlugin, "go", false, "generate hashicorp go plugin")
scaffoldCmd.Flags().BoolVar(&ignorePlugin, "ignore-plugin", false, "ignore function plugin")

View File

@@ -1,28 +1,24 @@
package scaffold
import (
"os"
"testing"
)
func TestGenDemoExamples(t *testing.T) {
dir := "../../../examples/demo-with-go-plugin"
os.RemoveAll(dir)
err := CreateScaffold(dir, Go)
err := CreateScaffold(dir, Go, true)
if err != nil {
t.Fatal()
}
dir = "../../../examples/demo-with-py-plugin"
os.RemoveAll(dir)
err = CreateScaffold(dir, Py)
err = CreateScaffold(dir, Py, true)
if err != nil {
t.Fatal()
}
dir = "../../../examples/demo-without-plugin"
os.RemoveAll(dir)
err = CreateScaffold(dir, Ignore)
err = CreateScaffold(dir, Ignore, true)
if err != nil {
t.Fatal()
}

View File

@@ -42,25 +42,32 @@ func CopyFile(templateFile, targetFile string) error {
return nil
}
func CreateScaffold(projectName string, pluginType PluginType) error {
func CreateScaffold(projectName string, pluginType PluginType, force bool) error {
// report event
sdk.SendEvent(sdk.EventTracking{
Category: "Scaffold",
Action: "hrp startproject",
})
// check if projectName exists
if _, err := os.Stat(projectName); err == nil {
log.Warn().Str("projectName", projectName).
Msg("project name already exists, please specify a new one.")
return fmt.Errorf("project name already exists")
}
log.Info().
Str("projectName", projectName).
Str("pluginType", string(pluginType)).
Bool("force", force).
Msg("create new scaffold project")
// check if projectName exists
if _, err := os.Stat(projectName); err == nil {
if !force {
log.Warn().Str("projectName", projectName).
Msg("project name already exists, please specify a new one.")
return fmt.Errorf("project name already exists")
}
log.Warn().Str("projectName", projectName).
Msg("project name already exists, remove first !!!")
os.RemoveAll(projectName)
}
// create project folders
if err := builtin.CreateFolder(projectName); err != nil {
return err