internal/git/stats/http_clone.go (35 lines of code) (raw):

package stats import ( "context" "fmt" ) // HTTPClone hosts information about a typical HTTP-based clone. type HTTPClone struct { // ReferenceDiscovery is the reference discovery performed as part of the clone. ReferenceDiscovery HTTPReferenceDiscovery // FetchPack is the response to a git-fetch-pack(1) request which computes and transmits the // packfile. FetchPack HTTPFetchPack } // PerformHTTPClone does a Git HTTP clone, discarding cloned data to /dev/null. func PerformHTTPClone(ctx context.Context, url, user, password string, interactive bool) (HTTPClone, error) { printInteractive := func(format string, a ...interface{}) { if interactive { // Ignore any errors returned by this given that we only use it as a // debugging aid to write to stdout. fmt.Printf(format, a...) } } referenceDiscovery, err := performHTTPReferenceDiscovery(ctx, url, user, password, printInteractive) if err != nil { return HTTPClone{}, ctxErr(ctx, err) } fetchPack, err := performFetchPack(ctx, url, user, password, referenceDiscovery.Refs(), printInteractive) if err != nil { return HTTPClone{}, ctxErr(ctx, err) } return HTTPClone{ ReferenceDiscovery: referenceDiscovery, FetchPack: fetchPack, }, nil } func ctxErr(ctx context.Context, err error) error { if ctx.Err() != nil { return ctx.Err() } return err }