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  }