MCPcopy Create free account
hub / github.com/chainreactors/EvilProxy / resolveRemoteDefaultBranch

Function resolveRemoteDefaultBranch

internal/store/gitstore.go:678–717  ·  view source on GitHub ↗

resolveRemoteDefaultBranch queries the origin remote to determine the remote's default branch (the target of HEAD) and returns the corresponding local branch reference name (e.g. refs/heads/master).

(repo *git.Repository, authMethod transport.AuthMethod)

Source from the content-addressed store, hash-verified

676// resolveRemoteDefaultBranch queries the origin remote to determine the remote's default branch
677// (the target of HEAD) and returns the corresponding local branch reference name (e.g. refs/heads/master).
678func resolveRemoteDefaultBranch(repo *git.Repository, authMethod transport.AuthMethod) (resolvedRemoteBranch, error) {
679 if err := syncRemoteReferences(repo, authMethod); err != nil {
680 return resolvedRemoteBranch{}, fmt.Errorf("resolve remote default: sync remote refs: %w", err)
681 }
682 remote, err := repo.Remote("origin")
683 if err != nil {
684 return resolvedRemoteBranch{}, fmt.Errorf("resolve remote default: get remote: %w", err)
685 }
686 refs, err := remote.List(&git.ListOptions{Auth: authMethod})
687 if err != nil {
688 if resolved, ok := resolveRemoteDefaultBranchFromLocal(repo); ok {
689 return resolved, nil
690 }
691 return resolvedRemoteBranch{}, fmt.Errorf("resolve remote default: list remote refs: %w", err)
692 }
693 for _, r := range refs {
694 if r.Name() == plumbing.HEAD {
695 if r.Type() == plumbing.SymbolicReference {
696 if target, ok := normalizeRemoteBranchReference(r.Target()); ok {
697 return resolvedRemoteBranch{name: target}, nil
698 }
699 }
700 s := r.String()
701 if idx := strings.Index(s, "->"); idx != -1 {
702 if target, ok := normalizeRemoteBranchReference(plumbing.ReferenceName(strings.TrimSpace(s[idx+2:]))); ok {
703 return resolvedRemoteBranch{name: target}, nil
704 }
705 }
706 }
707 }
708 if resolved, ok := resolveRemoteDefaultBranchFromLocal(repo); ok {
709 return resolved, nil
710 }
711 for _, r := range refs {
712 if normalized, ok := normalizeRemoteBranchReference(r.Name()); ok {
713 return resolvedRemoteBranch{name: normalized, hash: r.Hash()}, nil
714 }
715 }
716 return resolvedRemoteBranch{}, fmt.Errorf("resolve remote default: remote default branch not found")
717}
718
719func resolveRemoteDefaultBranchFromLocal(repo *git.Repository) (resolvedRemoteBranch, bool) {
720 ref, err := repo.Reference(plumbing.ReferenceName("refs/remotes/origin/HEAD"), true)

Callers 1

Calls 6

syncRemoteReferencesFunction · 0.85
ListMethod · 0.65
NameMethod · 0.65
StringMethod · 0.45

Tested by

no test coverage detected