github.com/pluralsh/plural-cli@v0.9.5/pkg/utils/git/repo.go (about) 1 package git 2 3 import ( 4 "bufio" 5 "strings" 6 7 gogit "github.com/go-git/go-git/v5" 8 ) 9 10 func Root() (string, error) { 11 return GitRaw("rev-parse", "--show-toplevel") 12 } 13 14 func Repo() (*gogit.Repository, error) { 15 root, err := Root() 16 if err != nil { 17 return nil, err 18 } 19 20 return gogit.PlainOpen(root) 21 } 22 23 func CurrentBranch() (string, error) { 24 return GitRaw("rev-parse", "--abbrev-ref", "HEAD") 25 } 26 27 func Submodule(url string) error { 28 _, err := GitRaw("submodule", "add", url) 29 return err 30 } 31 32 func HasUpstreamChanges() (bool, string, error) { 33 headRef, err := GitRaw("rev-parse", "--symbolic-full-name", "HEAD") 34 if err != nil { 35 return false, "", err 36 } 37 38 headSha, err := GitRaw("rev-parse", "HEAD") 39 if err != nil { 40 return false, "", err 41 } 42 43 res, err := GitRaw("ls-remote", "origin", "-h", headRef) 44 if err != nil { 45 return false, "", err 46 } 47 48 scanner := bufio.NewScanner(strings.NewReader(res)) 49 var remote string 50 for scanner.Scan() { 51 line := scanner.Text() 52 remote = strings.Fields(line)[0] 53 if IsSha(remote) { 54 break 55 } 56 } 57 58 return remote == headSha, remote, nil 59 } 60 61 func Init() (string, error) { 62 return GitRaw("init") 63 } 64 65 func GetURL() (string, error) { 66 return GitRaw("ls-remote", "--get-url") 67 }