From 23b337f6beb4e7e389abdb2273e93770d89b2bea Mon Sep 17 00:00:00 2001 From: Paulo Gomes Date: Wed, 8 Jun 2022 09:29:11 +0100 Subject: [PATCH] libgit2: Improve HTTP redirection observability Git repositories may be redirected to different URLs when they are accessed via HTTP. The two most obvious scenarios are from HTTP to HTTPS and when the .git suffix is missing. By improving the logging on this process users can identify changes required to their GitRepository objects. Signed-off-by: Paulo Gomes --- pkg/git/libgit2/managed/http.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/pkg/git/libgit2/managed/http.go b/pkg/git/libgit2/managed/http.go index 4336e9756..32630768f 100644 --- a/pkg/git/libgit2/managed/http.go +++ b/pkg/git/libgit2/managed/http.go @@ -165,7 +165,7 @@ func (t *httpSmartSubtransport) Action(transportOptionsURL string, action git2go // Therefore, on the initial GET operation we update the target URL to include the // new target, so the subsequent actions include the correct target URL. // Example of this is trying to access a Git repository without the .git suffix. - if req.Response != nil && req.Response.StatusCode == http.StatusMovedPermanently { + if req.Response != nil { if newURL, err := req.Response.Location(); err == nil && newURL != nil { if strings.EqualFold(newURL.Host, req.URL.Host) && strings.EqualFold(newURL.Port(), req.URL.Port()) { opts, _ := getTransportOptions(transportOptionsURL) @@ -175,6 +175,9 @@ func (t *httpSmartSubtransport) Action(transportOptionsURL string, action git2go opts.TargetURL = trimActionSuffix(newURL.String()) AddTransportOptions(transportOptionsURL, *opts) + + debugLog.Info("[http]: server responded with redirect", + "newURL", opts.TargetURL, "StatusCode", req.Response.StatusCode) } } } @@ -419,7 +422,6 @@ func (self *httpSmartSubtransportStream) sendRequest() error { return err } - traceLog.Info("[http]: POST redirect", "URL", self.req.URL) continue } @@ -435,7 +437,7 @@ func (self *httpSmartSubtransportStream) sendRequest() error { return err } - return fmt.Errorf("Unhandled HTTP error %s", resp.Status) + return fmt.Errorf("unhandled HTTP error %s", resp.Status) } self.resp = resp