type notExistError … func (e notExistError) Error() string { … } func (notExistError) Is(err error) bool { … } const gitWorkDirType … func newGitRepo(ctx context.Context, remote string, local bool) (Repo, error) { … } type gitRepo … const fetchNone … const fetchSome … const fetchAll … // loadLocalTags loads tag references from the local git cache // into the map r.localTags. func (r *gitRepo) loadLocalTags(ctx context.Context) { … } func (r *gitRepo) CheckReuse(ctx context.Context, old *Origin, subdir string) error { … } // loadRefs loads heads and tags references from the remote into the map r.refs. // The result is cached in memory. func (r *gitRepo) loadRefs(ctx context.Context) (map[string]string, error) { … } func (r *gitRepo) Tags(ctx context.Context, prefix string) (*Tags, error) { … } // repoSum returns a checksum of the entire repo state, // which can be checked (as Origin.RepoSum) to cache // the absence of a specific module version. // The caller must supply refs, the result of a successful r.loadRefs. func (r *gitRepo) repoSum(refs map[string]string) string { … } // unknownRevisionInfo returns a RevInfo containing an Origin containing a RepoSum of refs, // for use when returning an UnknownRevisionError. func (r *gitRepo) unknownRevisionInfo(refs map[string]string) *RevInfo { … } func (r *gitRepo) Latest(ctx context.Context) (*RevInfo, error) { … } // findRef finds some ref name for the given hash, // for use when the server requires giving a ref instead of a hash. // There may be multiple ref names for a given hash, // in which case this returns some name - it doesn't matter which. func (r *gitRepo) findRef(ctx context.Context, hash string) (ref string, ok bool) { … } const minHashDigits … // stat stats the given rev in the local repository, // or else it fetches more info from the remote repository and tries again. func (r *gitRepo) stat(ctx context.Context, rev string) (info *RevInfo, err error) { … } // fetchRefsLocked fetches all heads and tags from the origin, along with the // ancestors of those commits. // // We only fetch heads and tags, not arbitrary other commits: we don't want to // pull in off-branch commits (such as rejected GitHub pull requests) that the // server may be willing to provide. (See the comments within the stat method // for more detail.) // // fetchRefsLocked requires that r.mu remain locked for the duration of the call. func (r *gitRepo) fetchRefsLocked(ctx context.Context) error { … } // statLocal returns a new RevInfo describing rev in the local git repository. // It uses version as info.Version. func (r *gitRepo) statLocal(ctx context.Context, version, rev string) (*RevInfo, error) { … } func (r *gitRepo) Stat(ctx context.Context, rev string) (*RevInfo, error) { … } func (r *gitRepo) ReadFile(ctx context.Context, rev, file string, maxSize int64) ([]byte, error) { … } func (r *gitRepo) RecentTag(ctx context.Context, rev, prefix string, allowed func(tag string) bool) (tag string, err error) { … } func (r *gitRepo) DescendsFrom(ctx context.Context, rev, tag string) (bool, error) { … } func (r *gitRepo) ReadZip(ctx context.Context, rev, subdir string, maxSize int64) (zip io.ReadCloser, err error) { … } // ensureGitAttributes makes sure export-subst and export-ignore features are // disabled for this repo. This is intended to be run prior to running git // archive so that zip files are generated that produce consistent ziphashes // for a given revision, independent of variables such as git version and the // size of the repo. // // See: https://github.com/golang/go/issues/27153 func ensureGitAttributes(repoDir string) (err error) { … } func (r *gitRepo) runGit(ctx context.Context, cmdline ...any) ([]byte, error) { … }