1package commands
2
3import (
4 "github.com/spf13/cobra"
5
6 "github.com/MichaelMure/git-bug/cache"
7 "github.com/MichaelMure/git-bug/input"
8 "github.com/MichaelMure/git-bug/util/interrupt"
9)
10
11func newUserCreateCommand() *cobra.Command {
12 env := newEnv()
13
14 cmd := &cobra.Command{
15 Use: "create",
16 Short: "Create a new identity.",
17 PreRunE: loadRepo(env),
18 RunE: func(cmd *cobra.Command, args []string) error {
19 return runUserCreate(env)
20 },
21 }
22
23 return cmd
24}
25
26func runUserCreate(env *Env) error {
27 backend, err := cache.NewRepoCache(env.repo)
28 if err != nil {
29 return err
30 }
31 defer backend.Close()
32 interrupt.RegisterCleaner(backend.Close)
33
34 preName, err := backend.GetUserName()
35 if err != nil {
36 return err
37 }
38
39 name, err := input.PromptDefault("Name", "name", preName, input.Required)
40 if err != nil {
41 return err
42 }
43
44 preEmail, err := backend.GetUserEmail()
45 if err != nil {
46 return err
47 }
48
49 email, err := input.PromptDefault("Email", "email", preEmail, input.Required)
50 if err != nil {
51 return err
52 }
53
54 avatarURL, err := input.Prompt("Avatar URL", "avatar")
55 if err != nil {
56 return err
57 }
58
59 id, err := backend.NewIdentityRaw(name, email, "", avatarURL, nil)
60 if err != nil {
61 return err
62 }
63
64 err = id.CommitAsNeeded()
65 if err != nil {
66 return err
67 }
68
69 set, err := backend.IsUserIdentitySet()
70 if err != nil {
71 return err
72 }
73
74 if !set {
75 err = backend.SetUserIdentity(id)
76 if err != nil {
77 return err
78 }
79 }
80
81 env.err.Println()
82 env.out.Println(id.Id())
83
84 return nil
85}