package cmd import ( "fmt" "gitea.com/gpm/cli/modules/config" "gitea.com/jolheiser/beaver" "github.com/AlecAivazis/survey/v2" "github.com/urfave/cli/v2" "strings" ) var Add = cli.Command{ Name: "add", Usage: "Add a gpm package", Flags: []cli.Flag{ &cli.BoolFlag{ Name: "force", Aliases: []string{"f"}, Usage: "Overwrite if the package already exists", }, }, Action: doAdd, } func doAdd(ctx *cli.Context) error { goGetQuestion := &survey.Input{ Message: "Package go-get URL", } var goGetAnswer string if err := survey.AskOne(goGetQuestion, &goGetAnswer); err != nil { return err } goGet := strings.Split(goGetAnswer, "/") defaultName := goGet[len(goGet)-1] // Check if go-get is actually pointing to a versioned module if strings.HasPrefix(defaultName, "v") { defaultName = goGet[len(goGet)-2] } nameQuestion := &survey.Input{ Message: "Package name for gpm", Default: defaultName, } var nameAnswer string if err := survey.AskOne(nameQuestion, &nameAnswer); err != nil { return err } pkg := config.Package{ Name: nameAnswer, URL: goGetAnswer, } if !ctx.Bool("force") { for idx, p := range config.Packages { if strings.EqualFold(p.Name, nameAnswer) { forceQuestion := &survey.Confirm{ Message: "This package already exists, do you want to overwrite?", Default: false, } var force bool if err := survey.AskOne(forceQuestion, &force); err != nil { return err } if !force { return fmt.Errorf("leaving package `%s` as-is", nameAnswer) } config.Packages[idx] = pkg break } } } else { config.Packages = append(config.Packages, pkg) } if err := config.Save(); err != nil { return err } beaver.Infof("Added `%s` to local gpm.", nameAnswer) return nil }