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 }