about summary refs log tree commit diff stats
path: root/internal/fetcher/http.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/fetcher/http.go')
-rw-r--r--internal/fetcher/http.go40
1 files changed, 22 insertions, 18 deletions
diff --git a/internal/fetcher/http.go b/internal/fetcher/http.go
index c5ec8fc..ba99c3a 100644
--- a/internal/fetcher/http.go
+++ b/internal/fetcher/http.go
@@ -11,7 +11,7 @@ import (
 	"go.alanpearce.eu/searchix/internal/config"
 
 	"github.com/andybalholm/brotli"
-	"github.com/pkg/errors"
+	"gitlab.com/tozd/go/errors"
 	"go.alanpearce.eu/x/log"
 )
 
@@ -36,17 +36,20 @@ func fetchFileIfNeeded(
 	log *log.Logger,
 	mtime time.Time,
 	url string,
-) (body io.ReadCloser, newMtime time.Time, err error) {
+) (io.ReadCloser, time.Time, errors.E) {
+	var newMtime time.Time
 	var ifModifiedSince string
 	if !mtime.IsZero() {
 		ifModifiedSince = strings.Replace(mtime.UTC().Format(time.RFC1123), "UTC", "GMT", 1)
 	}
 
-	req, err := http.NewRequestWithContext(ctx, "GET", url, http.NoBody)
-	if err != nil {
-		err = errors.WithMessagef(err, "could not create HTTP request for %s", url)
-
-		return
+	req, baseErr := http.NewRequestWithContext(ctx, "GET", url, http.NoBody)
+	if baseErr != nil {
+		return nil, newMtime, errors.WithMessagef(
+			baseErr,
+			"could not create HTTP request for %s",
+			url,
+		)
 	}
 
 	req.Header.Set("User-Agent", fmt.Sprintf("Searchix %s", config.Version))
@@ -54,21 +57,22 @@ func fetchFileIfNeeded(
 	if ifModifiedSince != "" {
 		req.Header.Set("If-Modified-Since", ifModifiedSince)
 	}
-	res, err := http.DefaultClient.Do(req)
-	if err != nil {
-		err = errors.WithMessagef(err, "could not make HTTP request to %s", url)
-
-		return
+	res, baseErr := http.DefaultClient.Do(req)
+	if baseErr != nil {
+		return nil, newMtime, errors.WithMessagef(baseErr, "could not make HTTP request to %s", url)
 	}
 
+	var body io.ReadCloser
+	var err errors.E
 	switch res.StatusCode {
 	case http.StatusNotModified:
 		newMtime = mtime
 
-		return
+		return nil, newMtime, nil
 	case http.StatusOK:
-		newMtime, err = time.Parse(time.RFC1123, res.Header.Get("Last-Modified"))
-		if err != nil {
+		var baseErr error
+		newMtime, baseErr = time.Parse(time.RFC1123, res.Header.Get("Last-Modified"))
+		if baseErr != nil {
 			log.Warn(
 				"could not parse Last-Modified header from response",
 				"value",
@@ -84,11 +88,11 @@ func fetchFileIfNeeded(
 		case "", "identity", "gzip":
 			body = res.Body
 		default:
-			err = fmt.Errorf("cannot handle a body with content-encoding %s", ce)
+			err = errors.Errorf("cannot handle a body with content-encoding %s", ce)
 		}
 	default:
-		err = fmt.Errorf("got response code %d, don't know what to do", res.StatusCode)
+		err = errors.Errorf("got response code %d, don't know what to do", res.StatusCode)
 	}
 
-	return
+	return body, newMtime, err
 }