Skip to content

Commit

Permalink
Initially select last context names selected by user and support for …
Browse files Browse the repository at this point in the history
…- arg
  • Loading branch information
silphid committed Jun 26, 2021
1 parent db3fd70 commit 5ac7867
Show file tree
Hide file tree
Showing 5 changed files with 90 additions and 5 deletions.
12 changes: 11 additions & 1 deletion src/cmd/get/context/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,17 @@ func run(names []string) error {
return err
}

names, err = cmd.GetOrPromptContextNames(contexts, names)
lastNames, err := cmd.LoadLastNames()
if err != nil {
return err
}

names, err = cmd.GetOrPromptContextNames(contexts, names, lastNames)
if err != nil {
return err
}

err = cmd.SaveLastNames(names)
if err != nil {
return err
}
Expand Down
48 changes: 48 additions & 0 deletions src/cmd/last.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package cmd

import (
"errors"
"fmt"
"io/ioutil"
"os"
"strings"

"github.com/mitchellh/go-homedir"
)

func getLastNamesFilePath() (string, error) {
return homedir.Expand("~/.yeylast")
}

// SaveLastNames saves to home dir the context names that were last selected by user
func SaveLastNames(names []string) error {
file, err := getLastNamesFilePath()
if err != nil {
return fmt.Errorf("failed to determine last context names file path: %w", err)
}

err = ioutil.WriteFile(file, ([]byte)(strings.Join(names, " ")), 0644)
if err != nil {
return fmt.Errorf("failed to write last context names file: %w", err)
}

return nil
}

// LoadLastNames loads from home dir the context names that were last selected by user
func LoadLastNames() ([]string, error) {
file, err := getLastNamesFilePath()
if err != nil {
return nil, fmt.Errorf("failed to determine last context names file path: %w", err)
}

text, err := ioutil.ReadFile(file)
if err != nil {
if errors.Is(err, os.ErrNotExist) {
return []string{}, nil
}
return nil, fmt.Errorf("failed to read last context names file: %w", err)
}

return strings.Split((string)(text), " "), nil
}
9 changes: 8 additions & 1 deletion src/cmd/prompts.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,11 @@ import (
)

// Parses given value into context name and variant and, as needed, prompt user for those values
func GetOrPromptContextNames(contexts yey.Contexts, names []string) ([]string, error) {
func GetOrPromptContextNames(contexts yey.Contexts, names []string, lastNames []string) ([]string, error) {
if len(names) == 1 && names[0] == "-" {
return lastNames, nil
}

availableNames := contexts.GetNamesInAllLayers()

// Prompt unspecified names
Expand All @@ -22,6 +26,9 @@ func GetOrPromptContextNames(contexts yey.Contexts, names []string) ([]string, e
Message: fmt.Sprintf("Select %s:", contexts.Layers[i].Name),
Options: availableNames[i],
}
if i < len(lastNames) {
prompt.Default = lastNames[i]
}
selectedIndex := 0
if err := survey.AskOne(prompt, &selectedIndex); err != nil {
return nil, err
Expand Down
14 changes: 12 additions & 2 deletions src/cmd/remove/remove.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,19 @@ func run(ctx context.Context, names []string, options docker.RemoveOptions) erro
return err
}

names, err = cmd.GetOrPromptContextNames(contexts, names)
lastNames, err := cmd.LoadLastNames()
if err != nil {
return fmt.Errorf("failed to prompt for context: %w", err)
return err
}

names, err = cmd.GetOrPromptContextNames(contexts, names, lastNames)
if err != nil {
return err
}

err = cmd.SaveLastNames(names)
if err != nil {
return err
}

context, err := contexts.GetContext(names)
Expand Down
12 changes: 11 additions & 1 deletion src/cmd/run/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,17 @@ func run(ctx context.Context, names []string, options Options) error {
return err
}

names, err = cmd.GetOrPromptContextNames(contexts, names)
lastNames, err := cmd.LoadLastNames()
if err != nil {
return err
}

names, err = cmd.GetOrPromptContextNames(contexts, names, lastNames)
if err != nil {
return err
}

err = cmd.SaveLastNames(names)
if err != nil {
return err
}
Expand Down

0 comments on commit 5ac7867

Please sign in to comment.