diff options
Diffstat (limited to '_examples/custom_http')
-rw-r--r-- | _examples/custom_http/main.go | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/_examples/custom_http/main.go b/_examples/custom_http/main.go new file mode 100644 index 0000000..ee8b96b --- /dev/null +++ b/_examples/custom_http/main.go @@ -0,0 +1,53 @@ +package main + +import ( + "crypto/tls" + "fmt" + "net/http" + "os" + "time" + + "srcd.works/go-git.v4" + . "srcd.works/go-git.v4/examples" + "srcd.works/go-git.v4/plumbing/transport/client" + githttp "srcd.works/go-git.v4/plumbing/transport/http" + "srcd.works/go-git.v4/storage/memory" +) + +// Here is an example to configure http client according to our own needs. +func main() { + CheckArgs("<url>") + url := os.Args[1] + + // Create a custom http(s) client with your config + customClient := &http.Client{ + // accept any certificate (might be useful for testing) + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + }, + + // 15 second timeout + Timeout: 15 * time.Second, + + // don't follow redirect + CheckRedirect: func(req *http.Request, via []*http.Request) error { + return http.ErrUseLastResponse + }, + } + + // Override http(s) default protocol to use our custom client + client.InstallProtocol("https", githttp.NewClient(customClient)) + + // Clone repository using the new client if the protocol is https:// + Info("git clone %s", url) + + r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{URL: url}) + CheckIfError(err) + + // Retrieve the branch pointed by HEAD + Info("git rev-parse HEAD") + + head, err := r.Head() + CheckIfError(err) + fmt.Println(head.Hash()) +} |