github.com/jingweno/gh@v2.1.1-0.20221007190738-04a7985fa9a1+incompatible/github/remote.go (about)

     1  package github
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/jingweno/gh/git"
     6  	"net/url"
     7  	"regexp"
     8  	"strings"
     9  )
    10  
    11  type Remote struct {
    12  	Name string
    13  	URL  *url.URL
    14  }
    15  
    16  func (remote *Remote) Project() (*Project, error) {
    17  	return NewProjectFromURL(remote.URL)
    18  }
    19  
    20  func Remotes() (remotes []Remote, err error) {
    21  	re := regexp.MustCompile(`(.+)\s+(.+)\s+\((push|fetch)\)`)
    22  
    23  	rs, err := git.Remotes()
    24  	if err != nil {
    25  		err = fmt.Errorf("Can't load git remote")
    26  		return
    27  	}
    28  
    29  	remotesMap := make(map[string]string)
    30  	for _, r := range rs {
    31  		if re.MatchString(r) {
    32  			match := re.FindStringSubmatch(r)
    33  			name := strings.TrimSpace(match[1])
    34  			url := strings.TrimSpace(match[2])
    35  			remotesMap[name] = url
    36  		}
    37  	}
    38  
    39  	for n, u := range remotesMap {
    40  		url, e := git.ParseURL(u)
    41  		if e != nil {
    42  			err = e
    43  			return
    44  		}
    45  
    46  		remotes = append(remotes, Remote{Name: n, URL: url})
    47  	}
    48  
    49  	return
    50  }
    51  
    52  func OriginRemote() (*Remote, error) {
    53  	remotes, err := Remotes()
    54  	if err != nil {
    55  		return nil, err
    56  	}
    57  
    58  	for _, r := range remotes {
    59  		if r.Name == "origin" {
    60  			return &r, nil
    61  		}
    62  	}
    63  
    64  	return nil, fmt.Errorf("Can't find git remote origin")
    65  }