webui: allow specifying the initial query

Miklos Vajna created

Example use-case: given a github URL in a source code comment or commit
message, one can now run:

git bug webui --query 'metadata:github-url:"https://github.com/author/myproject/issues/42"'

on the commandline to look up the details of that issue on the web ui
quickly, offline.

Fixes <https://github.com/MichaelMure/git-bug/issues/592>.

Change summary

commands/webui.go            |  8 ++++++++
doc/man/git-bug-webui.1      |  4 ++++
doc/md/git-bug_webui.md      | 13 +++++++------
misc/bash_completion/git-bug |  4 ++++
4 files changed, 23 insertions(+), 6 deletions(-)

Detailed changes

commands/webui.go 🔗

@@ -6,6 +6,7 @@ import (
 	"log"
 	"net"
 	"net/http"
+	"net/url"
 	"os"
 	"os/signal"
 	"strconv"
@@ -34,6 +35,7 @@ type webUIOptions struct {
 	open     bool
 	noOpen   bool
 	readOnly bool
+	query string
 }
 
 func newWebUICommand() *cobra.Command {
@@ -62,6 +64,7 @@ Available git config:
 	flags.BoolVar(&options.noOpen, "no-open", false, "Prevent the automatic opening of the web UI in the default browser")
 	flags.IntVarP(&options.port, "port", "p", 0, "Port to listen to (default to random available port)")
 	flags.BoolVar(&options.readOnly, "read-only", false, "Whether to run the web UI in read-only mode")
+	flags.StringVar(&options.query, "query", "", "Set a custom query")
 
 	return cmd
 }
@@ -78,6 +81,11 @@ func runWebUI(env *Env, opts webUIOptions, args []string) error {
 	addr := net.JoinHostPort(opts.host, strconv.Itoa(opts.port))
 	webUiAddr := fmt.Sprintf("http://%s", addr)
 
+	if len(opts.query) > 0 {
+		// Explicitly set the query parameter instead of going with a default one.
+		webUiAddr = fmt.Sprintf("%s/?q=%s", webUiAddr, url.QueryEscape(opts.query))
+	}
+
 	router := mux.NewRouter()
 
 	// If the webUI is not read-only, use an authentication middleware with a

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

@@ -41,6 +41,10 @@ Available git config:
 \fB\-\-read\-only\fP[=false]
 	Whether to run the web UI in read\-only mode
 
+.PP
+\fB\-\-query\fP=""
+	Set a custom query
+
 .PP
 \fB\-h\fP, \fB\-\-help\fP[=false]
 	help for webui

doc/md/git-bug_webui.md 🔗

@@ -17,12 +17,13 @@ git-bug webui [flags]
 ### Options
 
 ```
-      --host string   Network address or hostname to listen to (default to 127.0.0.1) (default "127.0.0.1")
-      --open          Automatically open the web UI in the default browser
-      --no-open       Prevent the automatic opening of the web UI in the default browser
-  -p, --port int      Port to listen to (default to random available port)
-      --read-only     Whether to run the web UI in read-only mode
-  -h, --help          help for webui
+      --host string    Network address or hostname to listen to (default to 127.0.0.1) (default "127.0.0.1")
+      --open           Automatically open the web UI in the default browser
+      --no-open        Prevent the automatic opening of the web UI in the default browser
+  -p, --port int       Port to listen to (default to random available port)
+      --read-only      Whether to run the web UI in read-only mode
+      --query string   Set a custom query
+  -h, --help           help for webui
 ```
 
 ### SEE ALSO

misc/bash_completion/git-bug 🔗

@@ -1347,6 +1347,10 @@ _git-bug_webui()
     local_nonpersistent_flags+=("-p")
     flags+=("--read-only")
     local_nonpersistent_flags+=("--read-only")
+    flags+=("--query=")
+    two_word_flags+=("--query")
+    local_nonpersistent_flags+=("--query")
+    local_nonpersistent_flags+=("--query=")
 
     must_have_one_flag=()
     must_have_one_noun=()