bridge_configure.go

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