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/bridge/core"
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 := core.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		fmt.Printf("target (%s): ", strings.Join(targets, ","))
50
51		line, err := bufio.NewReader(os.Stdin).ReadString('\n')
52		if err != nil {
53			return "", err
54		}
55
56		line = strings.TrimRight(line, "\n")
57
58		for _, t := range targets {
59			if t == line {
60				return t, nil
61			}
62		}
63
64		fmt.Println("invalid target")
65	}
66}
67
68func promptName() (string, error) {
69	defaultName := "default"
70
71	fmt.Printf("name [%s]: ", defaultName)
72
73	line, err := bufio.NewReader(os.Stdin).ReadString('\n')
74	if err != nil {
75		return "", err
76	}
77
78	line = strings.TrimRight(line, "\n")
79
80	if line == "" {
81		return defaultName, nil
82	}
83
84	return line, nil
85}
86
87var bridgeConfigureCmd = &cobra.Command{
88	Use:   "configure",
89	Short: "Configure a new bridge",
90	RunE:  runBridgeConfigure,
91}
92
93func init() {
94	bridgeCmd.AddCommand(bridgeConfigureCmd)
95}