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}