diff options
| author | nsfisis <nsfisis@gmail.com> | 2022-10-15 10:49:45 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2022-10-15 10:49:45 +0900 |
| commit | b3d186476fcc63fe6aaa530679ca169f1727f821 (patch) | |
| tree | d3ef2caaa8e2979dba4591ae1d0bc61f17bc57df /src | |
| parent | 74c7ef7ba587292b53369a16b0b6039438603b9d (diff) | |
| download | dotfiles-b3d186476fcc63fe6aaa530679ca169f1727f821.tar.gz dotfiles-b3d186476fcc63fe6aaa530679ca169f1727f821.tar.zst dotfiles-b3d186476fcc63fe6aaa530679ca169f1727f821.zip | |
git: port the implementation of alias "git-sw" to Golang
Diffstat (limited to 'src')
| -rw-r--r-- | src/gitalias/git-sw.go | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/gitalias/git-sw.go b/src/gitalias/git-sw.go new file mode 100644 index 0000000..f4cab21 --- /dev/null +++ b/src/gitalias/git-sw.go @@ -0,0 +1,47 @@ +package main + +import ( + "log" + "os" + "os/exec" + "strings" +) + +func main() { + gitArgs := []string{"switch"} + if requiresDetachFlag(os.Args) { + gitArgs = append(gitArgs, "--detach") + } + for i, argv := range os.Args { + if i == 0 { + continue // argv[0] is a program name. + } + gitArgs = append(gitArgs, argv) + } + + cmd := exec.Command("git", gitArgs...) + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + + err := cmd.Run() + if err != nil { + switch err.(type) { + case *exec.ExitError: + // Do nothing here because Git has already reported the error. + default: + log.Fatal(err) + } + } + + os.Exit(cmd.ProcessState.ExitCode()) +} + +func requiresDetachFlag(argv []string) bool { + argc := len(argv) + if argc == 1 { + return false + } + firstArg := argv[1] + return strings.HasPrefix(firstArg, "origin/") || strings.HasPrefix(firstArg, "upstream/") +} |
