| 938 | } |
| 939 | |
| 940 | func parseRemotes(remotesStr []string) RemoteSet { |
| 941 | remotes := RemoteSet{} |
| 942 | for _, r := range remotesStr { |
| 943 | match := remoteRE.FindStringSubmatch(r) |
| 944 | if match == nil { |
| 945 | continue |
| 946 | } |
| 947 | name := strings.TrimSpace(match[1]) |
| 948 | urlStr := strings.TrimSpace(match[2]) |
| 949 | urlType := strings.TrimSpace(match[3]) |
| 950 | |
| 951 | url, err := ParseURL(urlStr) |
| 952 | if err != nil { |
| 953 | continue |
| 954 | } |
| 955 | |
| 956 | var rem *Remote |
| 957 | if len(remotes) > 0 { |
| 958 | rem = remotes[len(remotes)-1] |
| 959 | if name != rem.Name { |
| 960 | rem = nil |
| 961 | } |
| 962 | } |
| 963 | if rem == nil { |
| 964 | rem = &Remote{Name: name} |
| 965 | remotes = append(remotes, rem) |
| 966 | } |
| 967 | |
| 968 | switch urlType { |
| 969 | case "fetch": |
| 970 | rem.FetchURL = url |
| 971 | case "push": |
| 972 | rem.PushURL = url |
| 973 | } |
| 974 | } |
| 975 | return remotes |
| 976 | } |
| 977 | |
| 978 | func parseRemoteURLOrName(value string) (*url.URL, string) { |
| 979 | if strings.Contains(value, ":") { |