commands: show: change for a single valued --field flag

Michael Muré created

Change summary

commands/show.go                  | 126 +++++++++++++++++---------------
doc/man/git-bug-show.1            |   4 +
doc/md/git-bug_show.md            |   3 
misc/bash_completion/git-bug      |   3 
misc/git_hooks/prepare-commit-msg |   2 
5 files changed, 76 insertions(+), 62 deletions(-)

Detailed changes

commands/show.go 🔗

@@ -13,7 +13,7 @@ import (
 )
 
 var (
-	showFieldsQuery	[]string
+	showFieldsQuery string
 )
 
 func runShowBug(cmd *cobra.Command, args []string) error {
@@ -37,69 +37,75 @@ func runShowBug(cmd *cobra.Command, args []string) error {
 
 	firstComment := snapshot.Comments[0]
 
-	if showFieldsQuery==nil {
-		// Header
-		fmt.Printf("[%s] %s %s\n\n",
-			colors.Yellow(snapshot.Status),
-			colors.Cyan(snapshot.HumanId()),
-			snapshot.Title,
-		)
+	if showFieldsQuery != "" {
+		switch showFieldsQuery {
+		case "author":
+			fmt.Printf("%s\n", firstComment.Author.DisplayName())
+		case "authorEmail":
+			fmt.Printf("%s\n", firstComment.Author.Email)
+		case "createTime":
+			fmt.Printf("%s\n", firstComment.FormatTime())
+		case "id":
+			fmt.Printf("%s\n", snapshot.Id())
+		case "labels":
+			var labels = make([]string, len(snapshot.Labels))
+			fmt.Printf("%s\n", strings.Join(labels, ", "))
+		case "shortId":
+			fmt.Printf("%s\n", snapshot.HumanId())
+		case "status":
+			fmt.Printf("%s\n", snapshot.Status)
+		case "title":
+			fmt.Printf("%s\n", snapshot.Title)
+		default:
+			return fmt.Errorf("\nUnsupported field: %s\n", showFieldsQuery)
+		}
 
-		fmt.Printf("%s opened this issue %s\n\n",
-			colors.Magenta(firstComment.Author.DisplayName()),
-			firstComment.FormatTimeRel(),
-		)
+		return nil
+	}
 
-		var labels = make([]string, len(snapshot.Labels))
-		for i := range snapshot.Labels {
-			labels[i] = string(snapshot.Labels[i])
-		}
+	// Header
+	fmt.Printf("[%s] %s %s\n\n",
+		colors.Yellow(snapshot.Status),
+		colors.Cyan(snapshot.HumanId()),
+		snapshot.Title,
+	)
+
+	fmt.Printf("%s opened this issue %s\n\n",
+		colors.Magenta(firstComment.Author.DisplayName()),
+		firstComment.FormatTimeRel(),
+	)
+
+	var labels = make([]string, len(snapshot.Labels))
+	for i := range snapshot.Labels {
+		labels[i] = string(snapshot.Labels[i])
+	}
 
-		fmt.Printf("labels: %s\n\n",
-			strings.Join(labels, ", "),
+	fmt.Printf("labels: %s\n\n",
+		strings.Join(labels, ", "),
+	)
+
+	// Comments
+	indent := "  "
+
+	for i, comment := range snapshot.Comments {
+		var message string
+		fmt.Printf("%s#%d %s <%s>\n\n",
+			indent,
+			i,
+			comment.Author.DisplayName(),
+			comment.Author.Email,
 		)
 
-		// Comments
-		indent := "  "
-
-		for i, comment := range snapshot.Comments {
-			var message string
-			fmt.Printf("%s#%d %s <%s>\n\n",
-				indent,
-				i,
-				comment.Author.DisplayName(),
-				comment.Author.Email,
-			)
-
-			if comment.Message == "" {
-				message = colors.GreyBold("No description provided.")
-			} else {
-				message = comment.Message
-			}
-
-			fmt.Printf("%s%s\n\n\n",
-				indent,
-				message,
-			)
-		}
-	} else {
-		for _, field := range showFieldsQuery {
-			switch field {
-				case "author": fmt.Printf("%s ",firstComment.Author.DisplayName())
-				case "authorEmail": fmt.Printf("%s ",firstComment.Author.Email)
-				case "createTime": fmt.Printf("%s ",firstComment.FormatTime())
-				case "id": fmt.Printf("%s ",snapshot.Id())
-				case "labels":
-					var labels = make([]string, len(snapshot.Labels))
-					fmt.Printf("%s ",strings.Join(labels,", "))
-				case "shortId": fmt.Printf("%s ",snapshot.HumanId())
-				case "status": fmt.Printf("%s ",snapshot.Status)
-				case "title": fmt.Printf("%s ",snapshot.Title)
-				default:
-					return fmt.Errorf("\nUnsupported field: %s\n",field)
-			}
+		if comment.Message == "" {
+			message = colors.GreyBold("No description provided.")
+		} else {
+			message = comment.Message
 		}
-		fmt.Printf("\n")
+
+		fmt.Printf("%s%s\n\n\n",
+			indent,
+			message,
+		)
 	}
 
 	return nil
@@ -114,6 +120,6 @@ var showCmd = &cobra.Command{
 
 func init() {
 	RootCmd.AddCommand(showCmd)
-	showCmd.Flags().StringSliceVarP(&showFieldsQuery,"fields","f",nil,
-		"Selects fields to display. Valid values are [author,authorEmail,createTime,id,labels,shortId,status,title]")
+	showCmd.Flags().StringVarP(&showFieldsQuery, "field", "f", "",
+		"Select field to display. Valid values are [author,authorEmail,createTime,id,labels,shortId,status,title]")
 }

doc/man/git-bug-show.1 🔗

@@ -19,6 +19,10 @@ Display the details of a bug
 
 
 .SH OPTIONS
+.PP
+\fB\-f\fP, \fB\-\-field\fP=""
+    Select field to display. Valid values are [author,authorEmail,createTime,id,labels,shortId,status,title]
+
 .PP
 \fB\-h\fP, \fB\-\-help\fP[=false]
     help for show

doc/md/git-bug_show.md 🔗

@@ -13,7 +13,8 @@ git-bug show [<id>] [flags]
 ### Options
 
 ```
-  -h, --help   help for show
+  -f, --field string   Select field to display. Valid values are [author,authorEmail,createTime,id,labels,shortId,status,title]
+  -h, --help           help for show
 ```
 
 ### SEE ALSO

misc/bash_completion/git-bug 🔗

@@ -644,6 +644,9 @@ _git-bug_show()
     flags_with_completion=()
     flags_completion=()
 
+    flags+=("--field=")
+    two_word_flags+=("-f")
+    local_nonpersistent_flags+=("--field=")
 
     must_have_one_flag=()
     must_have_one_noun=()

misc/git_hooks/prepare-commit-msg 🔗

@@ -14,7 +14,7 @@ then
 	hashChar=":"
 fi
 
-ISSUE=`git bug show --fields shortId`
+ISSUE=`git bug show --field shortId`
 if [ "$ISSUE" = "" ]
 then
 	echo "$cmtChar !!!!! insert $hashChar<issue_id> in your comment, pick one in list below." >> "$1"