user_ls.go

 1package commands
 2
 3import (
 4	"encoding/json"
 5	"fmt"
 6
 7	"github.com/spf13/cobra"
 8
 9	"github.com/MichaelMure/git-bug/cache"
10	"github.com/MichaelMure/git-bug/util/colors"
11	"github.com/MichaelMure/git-bug/util/interrupt"
12)
13
14var (
15	userLsOutputFormat string
16)
17
18func runUserLs(_ *cobra.Command, _ []string) error {
19	backend, err := cache.NewRepoCache(repo)
20	if err != nil {
21		return err
22	}
23	defer backend.Close()
24	interrupt.RegisterCleaner(backend.Close)
25
26	ids := backend.AllIdentityIds()
27	var users []*cache.IdentityExcerpt
28	for _, id := range ids {
29		user, err := backend.ResolveIdentityExcerpt(id)
30		if err != nil {
31			return err
32		}
33		users = append(users, user)
34	}
35
36	switch userLsOutputFormat {
37	case "json":
38		return userLsJsonFormatter(users)
39	case "default":
40		return userLsDefaultFormatter(users)
41	default:
42		return fmt.Errorf("unknown format %s", userLsOutputFormat)
43	}
44}
45
46func userLsDefaultFormatter(users []*cache.IdentityExcerpt) error {
47	for _, user := range users {
48		fmt.Printf("%s %s\n",
49			colors.Cyan(user.Id.Human()),
50			user.DisplayName(),
51		)
52	}
53
54	return nil
55}
56
57func userLsJsonFormatter(users []*cache.IdentityExcerpt) error {
58	jsonUsers := make([]JSONIdentity, len(users))
59	for i, user := range users {
60		jsonUsers[i] = NewJSONIdentityFromExcerpt(user)
61	}
62
63	jsonObject, _ := json.MarshalIndent(jsonUsers, "", "    ")
64	fmt.Printf("%s\n", jsonObject)
65	return nil
66}
67
68var userLsCmd = &cobra.Command{
69	Use:     "ls",
70	Short:   "List identities.",
71	PreRunE: loadRepo,
72	RunE:    runUserLs,
73}
74
75func init() {
76	userCmd.AddCommand(userLsCmd)
77	userLsCmd.Flags().SortFlags = false
78	userLsCmd.Flags().StringVarP(&userLsOutputFormat, "format", "f", "default",
79		"Select the output formatting style. Valid values are [default,json]")
80}