user_ls.go

  1package commands
  2
  3import (
  4	"encoding/json"
  5	"fmt"
  6	"github.com/MichaelMure/git-bug/cache"
  7	"github.com/MichaelMure/git-bug/util/colors"
  8	"github.com/MichaelMure/git-bug/util/interrupt"
  9	"github.com/spf13/cobra"
 10)
 11
 12var (
 13	userLsOutputFormat string
 14)
 15
 16func runUserLs(_ *cobra.Command, _ []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	switch userLsOutputFormat {
 25	case "json":
 26		return userLsJsonFormatter(backend)
 27	case "plain":
 28		return userLsPlainFormatter(backend)
 29	case "default":
 30		return userLsDefaultFormatter(backend)
 31	default:
 32		return fmt.Errorf("unknown format %s", userLsOutputFormat)
 33	}
 34}
 35
 36type JSONIdentity struct {
 37	Id      string `json:"id"`
 38	HumanId string `json:"human_id"`
 39	Name    string `json:"name"`
 40	Login   string `json:"login"`
 41}
 42
 43func userLsPlainFormatter(backend *cache.RepoCache) error {
 44	for _, id := range backend.AllIdentityIds() {
 45		i, err := backend.ResolveIdentityExcerpt(id)
 46		if err != nil {
 47			return err
 48		}
 49
 50		fmt.Printf("%s %s\n",
 51			i.Id.Human(),
 52			i.DisplayName(),
 53		)
 54	}
 55
 56	return nil
 57}
 58
 59func userLsDefaultFormatter(backend *cache.RepoCache) error {
 60	for _, id := range backend.AllIdentityIds() {
 61		i, err := backend.ResolveIdentityExcerpt(id)
 62		if err != nil {
 63			return err
 64		}
 65
 66		fmt.Printf("%s %s\n",
 67			colors.Cyan(i.Id.Human()),
 68			i.DisplayName(),
 69		)
 70	}
 71
 72	return nil
 73}
 74
 75func userLsJsonFormatter(backend *cache.RepoCache) error {
 76	users := []JSONIdentity{}
 77	for _, id := range backend.AllIdentityIds() {
 78		i, err := backend.ResolveIdentityExcerpt(id)
 79		if err != nil {
 80			return err
 81		}
 82
 83		users = append(users, JSONIdentity{
 84			i.Id.String(),
 85			i.Id.Human(),
 86			i.Name,
 87			i.Login,
 88		})
 89	}
 90
 91	jsonObject, _ := json.MarshalIndent(users, "", "    ")
 92	fmt.Printf("%s\n", jsonObject)
 93	return nil
 94}
 95
 96var userLsCmd = &cobra.Command{
 97	Use:     "ls",
 98	Short:   "List identities.",
 99	PreRunE: loadRepo,
100	RunE:    runUserLs,
101}
102
103func init() {
104	userCmd.AddCommand(userLsCmd)
105	userLsCmd.Flags().SortFlags = false
106	userLsCmd.Flags().StringVarP(&userLsOutputFormat, "format", "f", "default",
107		"Select the output formatting style. Valid values are [default,plain,json]")
108}