mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-07-05 00:59:19 +02:00
add git config check and editing ability
This commit is contained in:
113
vendor/github.com/tcnksm/go-gitconfig/gitconfig.go
generated
vendored
Normal file
113
vendor/github.com/tcnksm/go-gitconfig/gitconfig.go
generated
vendored
Normal file
@ -0,0 +1,113 @@
|
||||
// Package gitconfig enables you to use `~/.gitconfig` values in Golang.
|
||||
//
|
||||
// For a full guide visit http://github.com/tcnksm/go-gitconfig
|
||||
//
|
||||
// package main
|
||||
//
|
||||
// import (
|
||||
// "github.com/tcnksm/go-gitconfig"
|
||||
// "fmt"
|
||||
// )
|
||||
//
|
||||
// func main() {
|
||||
// user, err := gitconfig.Global("user.name")
|
||||
// if err == nil {
|
||||
// fmt.Println(user)
|
||||
// }
|
||||
// }
|
||||
//
|
||||
package gitconfig
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os/exec"
|
||||
"regexp"
|
||||
"strings"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
// Entire extracts configuration value from `$HOME/.gitconfig` file ,
|
||||
// `$GIT_CONFIG`, /etc/gitconfig or include.path files.
|
||||
func Entire(key string) (string, error) {
|
||||
return execGitConfig(key)
|
||||
}
|
||||
|
||||
// Global extracts configuration value from `$HOME/.gitconfig` file or `$GIT_CONFIG`.
|
||||
func Global(key string) (string, error) {
|
||||
return execGitConfig("--global", key)
|
||||
}
|
||||
|
||||
// Local extracts configuration value from current project repository.
|
||||
func Local(key string) (string, error) {
|
||||
return execGitConfig("--local", key)
|
||||
}
|
||||
|
||||
// GithubUser extracts github.user name from `Entire gitconfig`
|
||||
// This is same as Entire("github.user")
|
||||
func GithubUser() (string, error) {
|
||||
return Entire("github.user")
|
||||
}
|
||||
|
||||
// Username extracts git user name from `Entire gitconfig`.
|
||||
// This is same as Entire("user.name")
|
||||
func Username() (string, error) {
|
||||
return Entire("user.name")
|
||||
}
|
||||
|
||||
// Email extracts git user email from `$HOME/.gitconfig` file or `$GIT_CONFIG`.
|
||||
// This is same as Global("user.email")
|
||||
func Email() (string, error) {
|
||||
return Entire("user.email")
|
||||
}
|
||||
|
||||
// OriginURL extract remote origin url from current project repository.
|
||||
// This is same as Local("remote.origin.url")
|
||||
func OriginURL() (string, error) {
|
||||
return Local("remote.origin.url")
|
||||
}
|
||||
|
||||
// Repository extract repository name of current project repository.
|
||||
func Repository() (string, error) {
|
||||
url, err := OriginURL()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
repo := retrieveRepoName(url)
|
||||
return repo, nil
|
||||
}
|
||||
|
||||
// Github extracts github token from `Entire gitconfig`.
|
||||
// This is same as Entire("github.token")
|
||||
func GithubToken() (string, error) {
|
||||
return Entire("github.token")
|
||||
}
|
||||
|
||||
func execGitConfig(args ...string) (string, error) {
|
||||
gitArgs := append([]string{"config", "--get", "--null"}, args...)
|
||||
var stdout bytes.Buffer
|
||||
cmd := exec.Command("git", gitArgs...)
|
||||
cmd.Stdout = &stdout
|
||||
cmd.Stderr = ioutil.Discard
|
||||
|
||||
err := cmd.Run()
|
||||
if exitError, ok := err.(*exec.ExitError); ok {
|
||||
if waitStatus, ok := exitError.Sys().(syscall.WaitStatus); ok {
|
||||
if waitStatus.ExitStatus() == 1 {
|
||||
return "", fmt.Errorf("the key `%s` is not found", args[len(args)-1])
|
||||
}
|
||||
}
|
||||
return "", err
|
||||
}
|
||||
|
||||
return strings.TrimRight(stdout.String(), "\000"), nil
|
||||
}
|
||||
|
||||
var RepoNameRegexp = regexp.MustCompile(`.+/([^/]+)(\.git)?$`)
|
||||
|
||||
func retrieveRepoName(url string) string {
|
||||
matched := RepoNameRegexp.FindStringSubmatch(url)
|
||||
return strings.TrimSuffix(matched[1], ".git")
|
||||
}
|
Reference in New Issue
Block a user