aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2025-02-13 14:01:15 +0100
committerTaras Madan <tarasmadan@google.com>2025-02-13 14:54:04 +0000
commiteb791944826a22c0fe8f1377831aed7681858b83 (patch)
treeb9f8d542f816190e70c6926a174a880016e4db05 /pkg
parenta98a8417f2c0dfdab1e8d3d49e8a7605340ada89 (diff)
dashboard/app: support gerrit servers as a webgit source
Gerrit servers return base64 encoded file content. To get the raw data, &format=TEXT request param is needed.
Diffstat (limited to 'pkg')
-rw-r--r--pkg/covermerger/provider_web.go30
1 files changed, 24 insertions, 6 deletions
diff --git a/pkg/covermerger/provider_web.go b/pkg/covermerger/provider_web.go
index e172d47e9..1c0442cae 100644
--- a/pkg/covermerger/provider_web.go
+++ b/pkg/covermerger/provider_web.go
@@ -4,11 +4,13 @@
package covermerger
import (
+ "encoding/base64"
"errors"
"fmt"
"io"
"net/http"
"net/url"
+ "strings"
)
type FuncProxyURI func(filePath, commit string) string
@@ -52,25 +54,41 @@ func (mr *webGit) loadFile(filePath, repo, commit string) ([]byte, error) {
}
u.Scheme = "https"
uri = u.String()
- res, err := http.Get(uri)
+ resp, err := http.Get(uri)
if err != nil {
return nil, fmt.Errorf("failed to http.Get: %w", err)
}
- defer res.Body.Close()
+ defer resp.Body.Close()
- if res.StatusCode == 404 {
+ if resp.StatusCode == 404 {
return nil, errFileNotFound
}
- if res.StatusCode != 200 {
- return nil, fmt.Errorf("error: status %d getting '%s'", res.StatusCode, uri)
+ if resp.StatusCode != 200 {
+ return nil, fmt.Errorf("error: status %d getting '%s'", resp.StatusCode, uri)
}
- body, err := io.ReadAll(res.Body)
+ body, err := io.ReadAll(resp.Body)
if err != nil {
return nil, fmt.Errorf("failed to io.ReadAll from body: %w", err)
}
+ if isGerritServer(resp) {
+ if body, err = base64.StdEncoding.DecodeString(string(body)); err != nil {
+ return nil, fmt.Errorf("base64.StdEncoding.DecodeString: %w", err)
+ }
+ }
return body, nil
}
+func isGerritServer(resp *http.Response) bool {
+ for _, headerVals := range resp.Header {
+ for _, header := range headerVals {
+ if strings.Contains(header, "gerrit") {
+ return true
+ }
+ }
+ }
+ return false
+}
+
func MakeWebGit(funcProxy FuncProxyURI) FileVersProvider {
return &webGit{
funcProxy: funcProxy,