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