зеркало из https://github.com/mislav/hub.git
128 строки
2.5 KiB
Go
128 строки
2.5 KiB
Go
package commands
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"regexp"
|
|
"strings"
|
|
|
|
"github.com/github/hub/v2/ui"
|
|
"github.com/github/hub/v2/utils"
|
|
)
|
|
|
|
var cmdAlias = &Command{
|
|
Run: alias,
|
|
Usage: "alias [-s] [<SHELL>]",
|
|
Long: `Show shell instructions for wrapping git.
|
|
|
|
## Options
|
|
-s
|
|
Output shell script suitable for ''eval''.
|
|
|
|
<SHELL>
|
|
Specify the type of shell (default: "$SHELL" environment variable).
|
|
|
|
## See also:
|
|
|
|
hub(1)
|
|
`,
|
|
}
|
|
|
|
func init() {
|
|
CmdRunner.Use(cmdAlias)
|
|
}
|
|
|
|
func alias(command *Command, args *Args) {
|
|
var shell string
|
|
if args.ParamsSize() > 0 {
|
|
shell = args.FirstParam()
|
|
} else {
|
|
shell = os.Getenv("SHELL")
|
|
}
|
|
|
|
flagAliasScript := args.Flag.Bool("-s")
|
|
if shell == "" {
|
|
cmd := "hub alias <shell>"
|
|
if flagAliasScript {
|
|
cmd = "hub alias -s <shell>"
|
|
}
|
|
utils.Check(fmt.Errorf("Error: couldn't detect shell type. Please specify your shell with `%s`", cmd))
|
|
}
|
|
|
|
shells := []string{"bash", "zsh", "sh", "ksh", "csh", "tcsh", "fish", "rc"}
|
|
shell = filepath.Base(shell)
|
|
var validShell bool
|
|
for _, s := range shells {
|
|
if s == shell {
|
|
validShell = true
|
|
break
|
|
}
|
|
}
|
|
|
|
if !validShell {
|
|
err := fmt.Errorf("hub alias: unsupported shell\nsupported shells: %s", strings.Join(shells, " "))
|
|
utils.Check(err)
|
|
}
|
|
|
|
if flagAliasScript {
|
|
var alias string
|
|
switch shell {
|
|
case "csh", "tcsh":
|
|
alias = "alias git hub"
|
|
case "rc":
|
|
alias = "fn git { builtin hub $* }"
|
|
default:
|
|
alias = "alias git=hub"
|
|
}
|
|
|
|
ui.Println(alias)
|
|
} else {
|
|
var profile string
|
|
switch shell {
|
|
case "bash":
|
|
profile = "~/.bash_profile"
|
|
case "zsh":
|
|
profile = "~/.zshrc"
|
|
case "ksh":
|
|
profile = "~/.profile"
|
|
case "fish":
|
|
profile = "~/.config/fish/functions/git.fish"
|
|
case "csh":
|
|
profile = "~/.cshrc"
|
|
case "tcsh":
|
|
profile = "~/.tcshrc"
|
|
case "rc":
|
|
profile = "$home/lib/profile"
|
|
default:
|
|
profile = "your profile"
|
|
}
|
|
|
|
msg := fmt.Sprintf("# Wrap git automatically by adding the following to %s:\n", profile)
|
|
ui.Println(msg)
|
|
|
|
var eval string
|
|
switch shell {
|
|
case "fish":
|
|
eval = `function git --wraps hub --description 'Alias for hub, which wraps git to provide extra functionality with GitHub.'
|
|
hub $argv
|
|
end`
|
|
case "rc":
|
|
eval = "eval `{hub alias -s}"
|
|
case "csh", "tcsh":
|
|
eval = "eval \"`hub alias -s`\""
|
|
default:
|
|
eval = `eval "$(hub alias -s)"`
|
|
}
|
|
|
|
indent := regexp.MustCompile(`(?m)^\t+`)
|
|
eval = indent.ReplaceAllStringFunc(eval, func(match string) string {
|
|
return strings.Repeat(" ", len(match)*4)
|
|
})
|
|
|
|
ui.Println(eval)
|
|
}
|
|
|
|
args.NoForward()
|
|
}
|