mirror of
https://gitea.com/gitea/tea.git
synced 2024-09-01 04:14:18 -04:00
add cli.AppHelpTemplate for customization customize tea help view tea --version : improve parseability Rework README to include tea help output It's an antipattern to have different help texts aimed at the same users. So now that we have a good cli help text, lets use it here. This eases maintenance, and at the same time gives an honest impression on what we have to offer, while also encouraging to improve the internal help text in the future. I feel a bit sad for the GIF, but it was becoming outdated anyway.. group commands by category add new demo gif shows the (probably) most useful workflow readme improvement Merge branch 'master' into improve-app-help code review Merge branch 'master' into improve-app-help restructure installation section Co-authored-by: Norwin Roosen <git@nroo.de> Reviewed-on: https://gitea.com/gitea/tea/pulls/311 Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com> Reviewed-by: khmarbaise <khmarbaise@noreply.gitea.io> Co-Authored-By: Norwin <noerw@noreply.gitea.io> Co-Committed-By: Norwin <noerw@noreply.gitea.io>
107 lines
2.5 KiB
Go
107 lines
2.5 KiB
Go
// Copyright 2020 The Gitea Authors. All rights reserved.
|
|
// Use of this source code is governed by a MIT-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"os"
|
|
"os/exec"
|
|
|
|
"github.com/adrg/xdg"
|
|
"github.com/urfave/cli/v2"
|
|
)
|
|
|
|
// CmdAutocomplete manages autocompletion
|
|
var CmdAutocomplete = cli.Command{
|
|
Name: "shellcompletion",
|
|
Aliases: []string{"autocomplete"},
|
|
Category: catSetup,
|
|
Usage: "Install shell completion for tea",
|
|
Description: "Install shell completion for tea",
|
|
ArgsUsage: "<shell type> (bash, zsh, powershell)",
|
|
Flags: []cli.Flag{
|
|
&cli.BoolFlag{
|
|
Name: "install",
|
|
Usage: "Persist in shell config instead of printing commands",
|
|
},
|
|
},
|
|
Action: runAutocompleteAdd,
|
|
}
|
|
|
|
func runAutocompleteAdd(ctx *cli.Context) error {
|
|
var remoteFile, localFile, cmds string
|
|
shell := ctx.Args().First()
|
|
|
|
switch shell {
|
|
case "zsh":
|
|
remoteFile = "contrib/autocomplete.zsh"
|
|
localFile = "autocomplete.zsh"
|
|
cmds = "echo 'PROG=tea _CLI_ZSH_AUTOCOMPLETE_HACK=1 source %s' >> ~/.zshrc && source ~/.zshrc"
|
|
|
|
case "bash":
|
|
remoteFile = "contrib/autocomplete.sh"
|
|
localFile = "autocomplete.sh"
|
|
cmds = "echo 'PROG=tea source %s' >> ~/.bashrc && source ~/.bashrc"
|
|
|
|
case "powershell":
|
|
remoteFile = "contrib/autocomplete.ps1"
|
|
localFile = "tea.ps1"
|
|
cmds = "\"& %s\" >> $profile"
|
|
|
|
default:
|
|
return fmt.Errorf("Must specify valid shell type")
|
|
}
|
|
|
|
localPath, err := xdg.ConfigFile("tea/" + localFile)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
cmds = fmt.Sprintf(cmds, localPath)
|
|
|
|
if err := saveAutoCompleteFile(remoteFile, localPath); err != nil {
|
|
return err
|
|
}
|
|
|
|
if ctx.Bool("install") {
|
|
fmt.Println("Installing in your shellrc")
|
|
installer := exec.Command(shell, "-c", cmds)
|
|
if shell == "powershell" {
|
|
installer = exec.Command("powershell.exe", "-Command", cmds)
|
|
}
|
|
out, err := installer.CombinedOutput()
|
|
if err != nil {
|
|
return fmt.Errorf("Couldn't run the commands: %s %s", err, out)
|
|
}
|
|
} else {
|
|
fmt.Println("\n# Run the following commands to install autocompletion (or use --install)")
|
|
fmt.Println(cmds)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func saveAutoCompleteFile(file, destPath string) error {
|
|
url := fmt.Sprintf("https://gitea.com/gitea/tea/raw/branch/master/%s", file)
|
|
fmt.Println("Fetching " + url)
|
|
|
|
res, err := http.Get(url)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer res.Body.Close()
|
|
|
|
writer, err := os.Create(destPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer writer.Close()
|
|
|
|
_, err = io.Copy(writer, res.Body)
|
|
return err
|
|
}
|