Set client version to lowest for compat if server version can't be recognized #612

Merged
6543 merged 5 commits from jolheiser/go-sdk:low-version into main 2023-04-02 21:30:54 +00:00
2 changed files with 20 additions and 0 deletions

View File

@ -9,6 +9,7 @@ import (
"bytes"
"context"
"encoding/json"
"errors"
"fmt"
"io"
"io/ioutil"
@ -67,6 +68,9 @@ func NewClient(url string, options ...ClientOption) (*Client, error) {
}
}
if err := client.checkServerVersionGreaterThanOrEqual(version1_11_0); err != nil {
if errors.As(err, &ErrUnknownVersion{}) {
return client, err
}
return nil, err
}

View File

@ -6,6 +6,7 @@ package gitea
import (
"fmt"
"strings"
"github.com/hashicorp/go-version"
)
@ -70,6 +71,16 @@ var (
version1_17_0 = version.Must(version.NewVersion("1.17.0"))
)
// ErrUnknownVersion is an unknown version from the API
type ErrUnknownVersion struct {
raw string
}
// Error fulfills error
func (e ErrUnknownVersion) Error() string {
return fmt.Sprintf("unknown version: %s", e.raw)
}
// checkServerVersionGreaterThanOrEqual is the canonical way in the SDK to check for versions for API compatibility reasons
func (c *Client) checkServerVersionGreaterThanOrEqual(v *version.Version) error {
if c.ignoreVersion {
@ -97,6 +108,11 @@ func (c *Client) loadServerVersion() (err error) {
return
}
if c.serverVersion, err = version.NewVersion(raw); err != nil {
if strings.TrimSpace(raw) != "" {
// Version was something, just not recognized
c.serverVersion = version1_11_0
err = ErrUnknownVersion{raw: raw}
}
return
}
})