package main
import "encoding/json"
import "fmt"
import "os"
import "text/tabwriter"
type repoInfo struct {
Name string `json:"name"`
IsPublic bool `json:"is_public"`
Authz *repoInfoAuthz `json:"authz"`
}
type repoInfoAuthz struct {
IsOwner bool `json:"is_owner"`
IsReader bool `json:"is_reader"`
OwnerUsername string `json:"owner_username"`
ReaderUsername string `json:"reader_username"`
}
type lsResponse struct {
Repos []repoInfo `json:"repos"`
CanCreateRepos bool `json:"can_create_repos"`
}
func runRepo(args []string) error {
if len(args) == 0 {
return fmt.Errorf("usage: okg repo list")
}
switch args[0] {
case "list":
return runRepoList(args[1:])
default:
return fmt.Errorf("unknown repo command: %s", args[0])
}
}
func runRepoList(args []string) error {
as_json := false
for _, a := range args {
if a == "--json" {
as_json = true
}
}
cfg, err := loadConfig()
if err != nil {
return err
}
cl := newClient(cfg)
var res lsResponse
if err := cl.getJSON("/.ls", &res); err != nil {
return err
}
if as_json {
enc := json.NewEncoder(os.Stdout)
enc.SetIndent("", " ")
return enc.Encode(res)
}
tw := tabwriter.NewWriter(os.Stdout, 0, 4, 2, ' ', 0)
fmt.Fprintln(tw, "NAME\tOWNER\tREADER")
for _, r := range res.Repos {
owner := ""
reader := ""
if r.Authz != nil {
owner = r.Authz.OwnerUsername
reader = r.Authz.ReaderUsername
}
fmt.Fprintf(tw, "%s\t%s\t%s\n", r.Name, owner, reader)
}
return tw.Flush()
}