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 RunE: runBridgeConfigure,
94}
95
96func init() {
97 bridgeCmd.AddCommand(bridgeConfigureCmd)
98}