CLI - allow user create without prompt (#650)

Hariharan and Michael Muré created

* CLI - allow user create without prompt. Fixes #577

* Update commands/user_create.go email message

Co-authored-by: Michael Muré <batolettre@gmail.com>

* Update docs

Co-authored-by: Michael Muré <batolettre@gmail.com>

Change summary

commands/user_create.go       | 59 ++++++++++++++++++++++++------------
doc/man/git-bug-user-create.1 | 12 +++++++
doc/md/git-bug_user_create.md |  5 ++
misc/bash_completion/git-bug  | 18 +++++++++++
4 files changed, 73 insertions(+), 21 deletions(-)

Detailed changes

commands/user_create.go 🔗

@@ -6,49 +6,68 @@ import (
 	"github.com/MichaelMure/git-bug/input"
 )
 
+type createUserOptions struct {
+	name      string
+	email     string
+	avatarURL string
+}
+
 func newUserCreateCommand() *cobra.Command {
 	env := newEnv()
 
+	options := createUserOptions{}
 	cmd := &cobra.Command{
 		Use:      "create",
 		Short:    "Create a new identity.",
 		PreRunE:  loadBackend(env),
 		PostRunE: closeBackend(env),
 		RunE: func(cmd *cobra.Command, args []string) error {
-			return runUserCreate(env)
+			return runUserCreate(env, options)
 		},
 	}
 
+	flags := cmd.Flags()
+	flags.StringVarP(&options.name, "name", "n", "", "Name to identify the user")
+	flags.StringVarP(&options.email, "email", "e", "", "Email of the user")
+	flags.StringVarP(&options.avatarURL, "avatar", "a", "", "Avatar URL")
+
 	return cmd
 }
 
-func runUserCreate(env *Env) error {
-	preName, err := env.backend.GetUserName()
-	if err != nil {
-		return err
-	}
+func runUserCreate(env *Env, opts createUserOptions) error {
 
-	name, err := input.PromptDefault("Name", "name", preName, input.Required)
-	if err != nil {
-		return err
+	if opts.name == "" {
+		preName, err := env.backend.GetUserName()
+		if err != nil {
+			return err
+		}
+		opts.name, err = input.PromptDefault("Name", "name", preName, input.Required)
+		if err != nil {
+			return err
+		}
 	}
 
-	preEmail, err := env.backend.GetUserEmail()
-	if err != nil {
-		return err
-	}
+	if opts.email == "" {
+		preEmail, err := env.backend.GetUserEmail()
+		if err != nil {
+			return err
+		}
 
-	email, err := input.PromptDefault("Email", "email", preEmail, input.Required)
-	if err != nil {
-		return err
+		opts.email, err = input.PromptDefault("Email", "email", preEmail, input.Required)
+		if err != nil {
+			return err
+		}
 	}
 
-	avatarURL, err := input.Prompt("Avatar URL", "avatar")
-	if err != nil {
-		return err
+	if opts.avatarURL == "" {
+		var err error
+		opts.avatarURL, err = input.Prompt("Avatar URL", "avatar")
+		if err != nil {
+			return err
+		}
 	}
 
-	id, err := env.backend.NewIdentityRaw(name, email, "", avatarURL, nil, nil)
+	id, err := env.backend.NewIdentityRaw(opts.name, opts.email, "", opts.avatarURL, nil, nil)
 	if err != nil {
 		return err
 	}

doc/man/git-bug-user-create.1 🔗

@@ -17,10 +17,22 @@ Create a new identity.
 
 
 .SH OPTIONS
+.PP
+\fB\-a\fP, \fB\-\-avatar\fP=""
+	Avatar URL
+
+.PP
+\fB\-e\fP, \fB\-\-email\fP=""
+	Email of the user
+
 .PP
 \fB\-h\fP, \fB\-\-help\fP[=false]
 	help for create
 
+.PP
+\fB\-n\fP, \fB\-\-name\fP=""
+	Name to identify the user
+
 
 .SH SEE ALSO
 .PP

doc/md/git-bug_user_create.md 🔗

@@ -9,7 +9,10 @@ git-bug user create [flags]
 ### Options
 
 ```
-  -h, --help   help for create
+  -a, --avatar string   Avatar URL
+  -e, --email string    Email of the user
+  -h, --help            help for create
+  -n, --name string     Name to identify the user
 ```
 
 ### SEE ALSO

misc/bash_completion/git-bug 🔗

@@ -1257,6 +1257,24 @@ _git-bug_user_create()
     flags_with_completion=()
     flags_completion=()
 
+    flags+=("--avatar=")
+    two_word_flags+=("--avatar")
+    two_word_flags+=("-a")
+    local_nonpersistent_flags+=("--avatar")
+    local_nonpersistent_flags+=("--avatar=")
+    local_nonpersistent_flags+=("-a")
+    flags+=("--email=")
+    two_word_flags+=("--email")
+    two_word_flags+=("-e")
+    local_nonpersistent_flags+=("--email")
+    local_nonpersistent_flags+=("--email=")
+    local_nonpersistent_flags+=("-e")
+    flags+=("--name=")
+    two_word_flags+=("--name")
+    two_word_flags+=("-n")
+    local_nonpersistent_flags+=("--name")
+    local_nonpersistent_flags+=("--name=")
+    local_nonpersistent_flags+=("-n")
 
     must_have_one_flag=()
     must_have_one_noun=()