diff --git a/git.go b/git.go index 20be334..2a37b7d 100644 --- a/git.go +++ b/git.go @@ -1,6 +1,12 @@ package main -import "os/exec" +import ( + "errors" + "fmt" + "os" + "os/exec" + "path/filepath" +) func SetGitConfig(user User, scope Scope, users []User, selectedUserIndex int) error { cmdName := exec.Command("git", "config", scope.String(), "user.name", user.Name) @@ -26,3 +32,23 @@ func SetGitConfig(user User, scope Scope, users []User, selectedUserIndex int) e return nil } + +func IsUnderGitDir() error { + cwd, err := os.Getwd() + if err != nil { + return err + } + + if _, err := os.Stat(filepath.Join(cwd, ".git")); errors.Is(err, os.ErrNotExist) { + return fmt.Errorf("you need to be in a git project directory to use gitsu") + } else if err != nil { + return err + } + + cmdRevParse := exec.Command("git", "rev-parse", "--is-inside-work-tree") + if err := cmdRevParse.Run(); err != nil { + return err + } + + return nil +} diff --git a/main.go b/main.go index 5de9c84..b970e25 100644 --- a/main.go +++ b/main.go @@ -76,6 +76,11 @@ func run() int { switch actionType { case sel: + if err := IsUnderGitDir(); err != nil { + fmt.Fprintf(os.Stderr, "Failed to detect git project: %v\n", err) + return 1 + } + if err := selectUser(); err != nil { fmt.Fprintf(os.Stderr, "Failed to select user: %v\n", err) return 1