github.com/thetechnoweenie/graven@v1.0.2/commands/repo.go (about) 1 package commands 2 3 import ( 4 "fmt" 5 "reflect" 6 7 "github.com/cbegin/graven/domain" 8 "github.com/cbegin/graven/repotool" 9 "github.com/urfave/cli" 10 "gopkg.in/yaml.v2" 11 ) 12 13 var RepoCommand = cli.Command{ 14 Name: "repo", 15 Usage: "Manages repository connections", 16 Action: repo, 17 Flags: []cli.Flag{ 18 cli.BoolFlag{ 19 Name: "login", 20 Usage: "Prompts for repo login credentials.", 21 }, 22 cli.StringFlag{ 23 Name: "name", 24 Usage: "Name of the repo to manage.", 25 }, 26 }, 27 } 28 29 func repo(c *cli.Context) error { 30 project, err := domain.FindProject() 31 if err != nil { 32 return err 33 } 34 35 repoName := c.String("name") 36 if repoName == "" { 37 return fmt.Errorf("No repo name specified.") 38 } 39 40 repository, found := project.Repositories[repoName] 41 if !found { 42 return fmt.Errorf("No repo named %v is found in project.", repoName) 43 } 44 45 if c.Bool("login") { 46 if repoTool, ok := repotool.RepoRegistry[repository.Type]; ok { 47 err := repoTool.Login(project, repoName) 48 if err != nil { 49 return err 50 } 51 } else { 52 fmt.Printf("Unknown repo type: %v. Expected one of %v", repository.Type, reflect.ValueOf(repotool.RepoRegistry).MapKeys()) 53 } 54 } else { 55 s, err := yaml.Marshal(repository) 56 if err != nil { 57 return err 58 } 59 fmt.Printf("%v\n", string(s)) 60 } 61 62 return nil 63 }