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}