bridge_configure.go

 1package commands
 2
 3import (
 4	"bufio"
 5	"fmt"
 6	"os"
 7	"strconv"
 8	"strings"
 9
10	"github.com/MichaelMure/git-bug/bridge"
11	"github.com/MichaelMure/git-bug/cache"
12	"github.com/spf13/cobra"
13)
14
15func runBridgeConfigure(cmd *cobra.Command, args []string) error {
16	backend, err := cache.NewRepoCache(repo)
17	if err != nil {
18		return err
19	}
20	defer backend.Close()
21
22	target, err := promptTarget()
23	if err != nil {
24		return err
25	}
26
27	name, err := promptName()
28	if err != nil {
29		return err
30	}
31
32	b, err := bridge.NewBridge(backend, target, name)
33	if err != nil {
34		return err
35	}
36
37	err = b.Configure()
38	if err != nil {
39		return err
40	}
41
42	return nil
43}
44
45func promptTarget() (string, error) {
46	targets := bridge.Targets()
47
48	for {
49		for i, target := range targets {
50			fmt.Printf("[%d]: %s\n", i+1, target)
51		}
52		fmt.Printf("target: ")
53
54		line, err := bufio.NewReader(os.Stdin).ReadString('\n')
55		if err != nil {
56			return "", err
57		}
58
59		line = strings.TrimRight(line, "\n")
60
61		index, err := strconv.Atoi(line)
62		if err != nil || index <= 0 || index > len(targets) {
63			fmt.Println("invalid input")
64			continue
65		}
66
67		return targets[index-1], nil
68	}
69}
70
71func promptName() (string, error) {
72	defaultName := "default"
73
74	fmt.Printf("name [%s]: ", defaultName)
75
76	line, err := bufio.NewReader(os.Stdin).ReadString('\n')
77	if err != nil {
78		return "", err
79	}
80
81	line = strings.TrimRight(line, "\n")
82
83	if line == "" {
84		return defaultName, nil
85	}
86
87	return line, nil
88}
89
90var bridgeConfigureCmd = &cobra.Command{
91	Use:     "configure",
92	Short:   "Configure a new bridge",
93	PreRunE: loadRepo,
94	RunE:    runBridgeConfigure,
95}
96
97func init() {
98	bridgeCmd.AddCommand(bridgeConfigureCmd)
99}