87 lines
2.0 KiB
Go
87 lines
2.0 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/pterm/pterm"
|
|
"github.com/spf13/cobra"
|
|
"github.com/spf13/viper"
|
|
"gitea.libretechconsulting.com/rmcguire/git-project-manager/internal/remotes/projects"
|
|
)
|
|
|
|
var aliasDeleteCmd = &cobra.Command{
|
|
Use: "delete [fuzzy project or alias]",
|
|
Aliases: []string{"rm", "del", "d"},
|
|
Short: "Delete a project alias",
|
|
Long: aliasDeleteCmdLong,
|
|
PreRun: mustHaveAliases,
|
|
Run: runDeleteAliasCmd,
|
|
}
|
|
|
|
func runDeleteAliasCmd(cmd *cobra.Command, args []string) {
|
|
var project *projects.Project
|
|
var err error
|
|
|
|
fzfOpts := &fzfProjectOpts{
|
|
Ctx: cmd.Context(),
|
|
MustHaveAlias: true,
|
|
}
|
|
|
|
if len(args) > 0 {
|
|
fzfOpts.Search = searchStringFromArgs(args)
|
|
project = fzfFindProject(fzfOpts)
|
|
} else {
|
|
project, err = fzfProject(fzfOpts)
|
|
}
|
|
|
|
if project == nil || err != nil {
|
|
plog.Fatal("Failed to find project to delete aliases from", plog.Args(
|
|
"error", err,
|
|
))
|
|
}
|
|
|
|
aliasStrings := projectCache.GetProjectAliasStrings(project)
|
|
|
|
deletionCandidates, err := pterm.DefaultInteractiveMultiselect.
|
|
WithOptions(aliasStrings).
|
|
Show()
|
|
|
|
if err != nil || len(deletionCandidates) < 1 {
|
|
plog.Fatal("Failed to find project to delete aliases from", plog.Args(
|
|
"error", err,
|
|
))
|
|
}
|
|
|
|
for _, a := range deletionCandidates {
|
|
|
|
confirm, _ := pterm.DefaultInteractiveConfirm.
|
|
WithDefaultText(fmt.Sprintf("Really delete %s -> %s?",
|
|
a, project.String())).
|
|
WithConfirmText("y").
|
|
Show()
|
|
|
|
if !confirm {
|
|
plog.Warn("Alias deletion cancelled")
|
|
continue
|
|
}
|
|
|
|
plog.Info("Deleting alias", plog.Args(
|
|
"project", project.String(),
|
|
"alias", a,
|
|
))
|
|
|
|
projectCache.DeleteAlias(projectCache.GetAliasByName(a))
|
|
}
|
|
|
|
fmt.Println(projectCache.ProjectString(project))
|
|
}
|
|
|
|
func init() {
|
|
aliasCmd.AddCommand(aliasDeleteCmd)
|
|
aliasDeleteCmd.PersistentFlags().Int("projectID", 0, "Specify a project by ID")
|
|
|
|
aliasDeleteCmd.RegisterFlagCompletionFunc("projectID", validProjectIdFunc)
|
|
|
|
viper.BindPFlag("alias.delete.projectID", aliasDeleteCmd.Flag("projectID"))
|
|
}
|