@cryptotaxi247 / kubo / commits / 27aa13fe4

return errors from constructor methods

This commit was moved from ipfs/go-ipfs-http-client@dbee4e27aaf9ef8e3fa7e25ac1f4f28df8a31e0d

Łukasz Magiera committed Feb 19, 2019 at 21:53 UTC 27aa13fe44561e8d9469ce537e64baa60d17a705
2 files changed +20 -24
client/httpapi/api.go
+16 -23
@@ -29,8 +29,7 @@ type HttpApi struct {
29 applyGlobal func(*RequestBuilder)
30 }
31
32 -//TODO: Return errors here
33 -func NewLocalApi() iface.CoreAPI {
32 +func NewLocalApi() (iface.CoreAPI, error) {
33 baseDir := os.Getenv(EnvDir)
34 if baseDir == "" {
35 baseDir = DefaultPathRoot
@@ -39,40 +38,34 @@ func NewLocalApi() iface.CoreAPI {
38 return NewPathApi(baseDir)
39 }
40
42 -func NewPathApi(p string) iface.CoreAPI {
43 - a := ApiAddr(p)
44 - if a == nil {
45 - return nil
41 +func NewPathApi(p string) (iface.CoreAPI, error) {
42 + a, err := ApiAddr(p)
43 + if err != nil {
44 + if err == os.ErrNotExist {
45 + err = nil
46 + }
47 + return nil, err
48 }
49 return NewApi(a)
50 }
51
50 -func ApiAddr(ipfspath string) ma.Multiaddr {
52 +func ApiAddr(ipfspath string) (ma.Multiaddr, error) {
53 baseDir, err := homedir.Expand(ipfspath)
54 if err != nil {
53 - return nil
55 + return nil, err
56 }
57
58 apiFile := path.Join(baseDir, DefaultApiFile)
59
58 - if _, err := os.Stat(apiFile); err != nil {
59 - return nil
60 - }
61 -
60 api, err := ioutil.ReadFile(apiFile)
61 if err != nil {
64 - return nil
65 - }
66 -
67 - maddr, err := ma.NewMultiaddr(strings.TrimSpace(string(api)))
68 - if err != nil {
69 - return nil
62 + return nil, err
63 }
64
72 - return maddr
65 + return ma.NewMultiaddr(strings.TrimSpace(string(api)))
66 }
67
75 -func NewApi(a ma.Multiaddr) *HttpApi { // TODO: should be MAddr?
68 +func NewApi(a ma.Multiaddr) (*HttpApi, error) {
69 c := &gohttp.Client{
70 Transport: &gohttp.Transport{
71 Proxy: gohttp.ProxyFromEnvironment,
@@ -83,10 +76,10 @@ func NewApi(a ma.Multiaddr) *HttpApi { // TODO: should be MAddr?
76 return NewApiWithClient(a, c)
77 }
78
86 -func NewApiWithClient(a ma.Multiaddr, c *gohttp.Client) *HttpApi {
79 +func NewApiWithClient(a ma.Multiaddr, c *gohttp.Client) (*HttpApi, error) {
80 _, url, err := manet.DialArgs(a)
81 if err != nil {
89 - return nil // TODO: return that error
82 + return nil, err
83 }
84
85 if a, err := ma.NewMultiaddr(url); err == nil {
@@ -107,7 +100,7 @@ func NewApiWithClient(a ma.Multiaddr, c *gohttp.Client) *HttpApi {
100 return fmt.Errorf("unexpected redirect")
101 }
102
110 - return api
103 + return api, nil
104 }
105
106 func (api *HttpApi) WithOptions(opts ...caopts.ApiOption) (iface.CoreAPI, error) {
client/httpapi/api_test.go
+4 -1
@@ -157,7 +157,10 @@ func (NodeProvider) makeAPISwarm(ctx context.Context, fullIdentity bool, n int)
157 DisableCompression: true,
158 },
159 }
160 - apis[i] = NewApiWithClient(maddr, c)
160 + apis[i], err = NewApiWithClient(maddr, c)
161 + if err != nil {
162 + panic(err)
163 + }
164
165 // empty node is pinned even with --empty-repo, we don't want that
166 emptyNode, err := iface.ParsePath("/ipfs/QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn")