// SetAPIAddr writes the API Addr to the /api file. func (r *FSRepo) SetAPIAddr(addr ma.Multiaddr) error { f, err := os.Create(filepath.Join(r.path, apiFile)) if err != nil { return err } defer f.Close() _, err = f.WriteString(addr.String()) return err }
// getApiClient checks the repo, and the given options, checking for // a running API service. if there is one, it returns a client. // otherwise, it returns errApiNotRunning, or another error. func getApiClient(repoPath, apiAddrStr string) (cmdsHttp.Client, error) { var apiErrorFmt string switch { case osh.IsUnix(): apiErrorFmt = apiFileErrorFmt + checkIPFSUnixFmt case osh.IsWindows(): apiErrorFmt = apiFileErrorFmt + checkIPFSWinFmt default: apiErrorFmt = apiFileErrorFmt } var addr ma.Multiaddr var err error if len(apiAddrStr) != 0 { addr, err = ma.NewMultiaddr(apiAddrStr) if err != nil { return nil, err } if len(addr.Protocols()) == 0 { return nil, fmt.Errorf("mulitaddr doesn't provide any protocols") } } else { addr, err = fsrepo.APIAddr(repoPath) if err == repo.ErrApiNotRunning { return nil, err } if err != nil { return nil, fmt.Errorf(apiErrorFmt, repoPath, err.Error()) } } if len(addr.Protocols()) == 0 { return nil, fmt.Errorf(apiErrorFmt, repoPath, "multiaddr doesn't provide any protocols") } return apiClientForAddr(addr) }