ParseRemoteTrackingRef parses a string of the form "refs/remotes/ / " into a RemoteTrackingBranch struct. If the string does not match this format, an error is returned. For now, we assume that refnames are of the format " / ", where the remote is a single path component
(s string)
| 616 | // |
| 617 | // When using this ref, git assumes it means `remote: foo` `branch: bar/baz`. |
| 618 | func ParseRemoteTrackingRef(s string) (RemoteTrackingRef, error) { |
| 619 | prefix := "refs/remotes/" |
| 620 | if !strings.HasPrefix(s, prefix) { |
| 621 | return RemoteTrackingRef{}, fmt.Errorf("remote tracking branch must have format refs/remotes/<remote>/<branch> but was: %s", s) |
| 622 | } |
| 623 | |
| 624 | refName := strings.TrimPrefix(s, prefix) |
| 625 | refNameParts := strings.SplitN(refName, "/", 2) |
| 626 | if len(refNameParts) != 2 { |
| 627 | return RemoteTrackingRef{}, fmt.Errorf("remote tracking branch must have format refs/remotes/<remote>/<branch> but was: %s", s) |
| 628 | } |
| 629 | |
| 630 | return RemoteTrackingRef{ |
| 631 | Remote: refNameParts[0], |
| 632 | Branch: refNameParts[1], |
| 633 | }, nil |
| 634 | } |
| 635 | |
| 636 | // PushRevision gets the value of the @{push} revision syntax |
| 637 | // An error here doesn't necessarily mean something is broken, but may mean that the @{push} |