From 1787f959ffed4cf0e4fa7ff2808c9aa13b605b29 Mon Sep 17 00:00:00 2001 From: Sebastien Devaux Date: Fri, 4 Jan 2019 15:15:42 +0100 Subject: [PATCH 1/5] Adding fields switch to show command to select fields to display. --- commands/show.go | 106 ++++++++++++++++++++++++++++++----------------- 1 file changed, 69 insertions(+), 37 deletions(-) diff --git a/commands/show.go b/commands/show.go index 935f617c64e455170378923273b3faf91000c590..15b42984c0f7ae85332a7e952e2225adfbbe6457 100644 --- a/commands/show.go +++ b/commands/show.go @@ -12,6 +12,10 @@ import ( "github.com/spf13/cobra" ) +var ( + showFieldsQuery []string +) + func runShowBug(cmd *cobra.Command, args []string) error { backend, err := cache.NewRepoCache(repo) if err != nil { @@ -33,49 +37,75 @@ func runShowBug(cmd *cobra.Command, args []string) error { firstComment := snapshot.Comments[0] - // 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, ", "), - ) - - // Comments - indent := " " + if showFieldsQuery==nil { + // Header + fmt.Printf("[%s] %s %s\n\n", + colors.Yellow(snapshot.Status), + colors.Cyan(snapshot.HumanId()), + snapshot.Title, + ) - 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, + fmt.Printf("%s opened this issue %s\n\n", + colors.Magenta(firstComment.Author.DisplayName()), + firstComment.FormatTimeRel(), ) - if comment.Message == "" { - message = colors.GreyBold("No description provided.") - } else { - message = comment.Message + var labels = make([]string, len(snapshot.Labels)) + for i := range snapshot.Labels { + labels[i] = string(snapshot.Labels[i]) } - fmt.Printf("%s%s\n\n\n", - indent, - message, + 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, + ) + + if comment.Message == "" { + message = colors.GreyBold("No description provided.") + } else { + message = comment.Message + } + + fmt.Printf("%s%s\n\n\n", + indent, + message, + ) + } + } else { + unknownFields:="" + err:=false + 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: + unknownFields+=field+" " + err=true + } + } + fmt.Printf("\n") + if err { + return errors.New(fmt.Sprintf("Unsupported fields requested: %s\n",unknownFields)) + } } return nil @@ -90,4 +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]") } From afbda3cc23282b6c37849048d33f9c9c12ef8fb8 Mon Sep 17 00:00:00 2001 From: Sebastien Devaux Date: Fri, 4 Jan 2019 15:29:24 +0100 Subject: [PATCH 2/5] git hook script exmaple to prefill commit message from selected issue --- misc/git_hooks/prepare-commit-msg | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100755 misc/git_hooks/prepare-commit-msg diff --git a/misc/git_hooks/prepare-commit-msg b/misc/git_hooks/prepare-commit-msg new file mode 100755 index 0000000000000000000000000000000000000000..e1d38c3c047b267b599a216e791b217673532318 --- /dev/null +++ b/misc/git_hooks/prepare-commit-msg @@ -0,0 +1,24 @@ +#!/bin/sh +# +# Insert selected git-bug issue identifier in the comment. +# if no selected issue, print in comments the list of open issues. +# +cmtChar=`git config --get core.commentchar` +hashChar="#" +if [ "$cmtChar" = "" ] +then + cmtChar="#" +fi +if [ "$cmtChar" = "#" ] +then + hashChar=":" +fi + +ISSUE=`git bug show --fields shortId` +if [ "$ISSUE" = "" ] +then + echo "$cmtChar !!!!! insert $hashChar in your comment, pick one in list below." >> "$1" + git bug ls status:open |sed 's/ open\t/ /'| sed "s/^/$cmtChar/" >> "$1" +else + sed -i "1i$hashChar$ISSUE " "$1" +fi From 68cbde492da7911f67e9cce561d4c877ae36bdbf Mon Sep 17 00:00:00 2001 From: Sebastien Devaux Date: Fri, 4 Jan 2019 15:38:47 +0100 Subject: [PATCH 3/5] Fixed golangci check error about new error from format string --- commands/show.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commands/show.go b/commands/show.go index 15b42984c0f7ae85332a7e952e2225adfbbe6457..bc89824144d3a8f380d451646250d2314101b619 100644 --- a/commands/show.go +++ b/commands/show.go @@ -104,7 +104,7 @@ func runShowBug(cmd *cobra.Command, args []string) error { } fmt.Printf("\n") if err { - return errors.New(fmt.Sprintf("Unsupported fields requested: %s\n",unknownFields)) + return fmt.Errorf("Unsupported fields requested: %s\n",unknownFields) } } From 5850116c0dd49bd42413305e2484beb50cbcc914 Mon Sep 17 00:00:00 2001 From: Sebastien Devaux Date: Mon, 7 Jan 2019 18:56:29 +0100 Subject: [PATCH 4/5] Simplified show commadn error handling. Exit on first unknown field found in query. --- commands/show.go | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/commands/show.go b/commands/show.go index bc89824144d3a8f380d451646250d2314101b619..0b5585f119368092e47b5279d306b054ef74bc3e 100644 --- a/commands/show.go +++ b/commands/show.go @@ -83,8 +83,6 @@ func runShowBug(cmd *cobra.Command, args []string) error { ) } } else { - unknownFields:="" - err:=false for _, field := range showFieldsQuery { switch field { case "author": fmt.Printf("%s ",firstComment.Author.DisplayName()) @@ -98,14 +96,10 @@ func runShowBug(cmd *cobra.Command, args []string) error { case "status": fmt.Printf("%s ",snapshot.Status) case "title": fmt.Printf("%s ",snapshot.Title) default: - unknownFields+=field+" " - err=true + return fmt.Errorf("\nUnsupported field: %s\n",field) } } fmt.Printf("\n") - if err { - return fmt.Errorf("Unsupported fields requested: %s\n",unknownFields) - } } return nil From 43d0fe5caec529baa348b44f6e1cba49e87754a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Mur=C3=A9?= Date: Mon, 7 Jan 2019 23:08:48 +0100 Subject: [PATCH 5/5] commands: show: change for a single valued --field flag --- 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(-) diff --git a/commands/show.go b/commands/show.go index 0b5585f119368092e47b5279d306b054ef74bc3e..56717b3bf0004ae12929d874ad2387a2b2047ba8 100644 --- a/commands/show.go +++ b/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]") } diff --git a/doc/man/git-bug-show.1 b/doc/man/git-bug-show.1 index 15344bba8dba484ff018b154cce0dd5b44c9e52a..05f856e97a24edda0b093207850bc5a669f7ab90 100644 --- a/doc/man/git-bug-show.1 +++ b/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 diff --git a/doc/md/git-bug_show.md b/doc/md/git-bug_show.md index 4749e009eabb1f60ca815b037070f081aba8cb09..677ce9cd91ad74c04a9e70f52d82db231a7c9453 100644 --- a/doc/md/git-bug_show.md +++ b/doc/md/git-bug_show.md @@ -13,7 +13,8 @@ git-bug show [] [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 diff --git a/misc/bash_completion/git-bug b/misc/bash_completion/git-bug index c5e8ddf333e8f734844e195a8520590a88db4c45..d6c282141c460d37b29b3d6ce8142664d38f02fa 100644 --- a/misc/bash_completion/git-bug +++ b/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=() diff --git a/misc/git_hooks/prepare-commit-msg b/misc/git_hooks/prepare-commit-msg index e1d38c3c047b267b599a216e791b217673532318..6066d40e6fcb8c98f21af3857ef4de7d908d0327 100755 --- a/misc/git_hooks/prepare-commit-msg +++ b/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 in your comment, pick one in list below." >> "$1"