user_create.go

 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}