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}