Skip to content

Commit d74e356

Browse files
为相关函数补充 context
1 parent a385414 commit d74e356

File tree

10 files changed

+81
-77
lines changed

10 files changed

+81
-77
lines changed

Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
GOPATH := $(shell go env GOPATH)
2+
13
fmt:
24
@(test -f "$(GOPATH)/bin/gofumpt" || go install mvdan.cc/gofumpt@latest) && \
35
"$(GOPATH)/bin/gofumpt" -l -w .

pkg/core/alias.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package core
22

33
import (
4+
"context"
45
"encoding/json"
56
"fmt"
67

@@ -21,8 +22,8 @@ func NewDomainAlias(config utils.KVConfig) *DomainAlias {
2122
return &DomainAlias{config: config}
2223
}
2324

24-
func (a *DomainAlias) Query(domain string) (*Alias, error) {
25-
get, err := a.config.Get("domain/alias/" + domain)
25+
func (a *DomainAlias) Query(ctx context.Context, domain string) (*Alias, error) {
26+
get, err := a.config.Get(ctx, "domain/alias/"+domain)
2627
if err != nil {
2728
return nil, err
2829
}
@@ -33,14 +34,14 @@ func (a *DomainAlias) Query(domain string) (*Alias, error) {
3334
return rel, nil
3435
}
3536

36-
func (a *DomainAlias) Bind(domains []string, owner, repo, branch string) error {
37+
func (a *DomainAlias) Bind(ctx context.Context, domains []string, owner, repo, branch string) error {
3738
oldDomains := make([]string, 0)
3839
rKey := fmt.Sprintf("domain/r-alias/%s/%s/%s", owner, repo, branch)
39-
if oldStr, err := a.config.Get(rKey); err == nil {
40+
if oldStr, err := a.config.Get(ctx, rKey); err == nil {
4041
_ = json.Unmarshal([]byte(oldStr), &oldDomains)
4142
}
4243
for _, oldDomain := range oldDomains {
43-
if err := a.Unbind(oldDomain); err != nil {
44+
if err := a.Unbind(ctx, oldDomain); err != nil {
4445
return err
4546
}
4647
}
@@ -54,15 +55,15 @@ func (a *DomainAlias) Bind(domains []string, owner, repo, branch string) error {
5455
}
5556
aliasMetaRaw, _ := json.Marshal(aliasMeta)
5657
domainsRaw, _ := json.Marshal(domains)
57-
_ = a.config.Put(rKey, string(domainsRaw), utils.TtlKeep)
58+
_ = a.config.Put(ctx, rKey, string(domainsRaw), utils.TtlKeep)
5859
for _, domain := range domains {
59-
if err := a.config.Put("domain/alias/"+domain, string(aliasMetaRaw), utils.TtlKeep); err != nil {
60+
if err := a.config.Put(ctx, "domain/alias/"+domain, string(aliasMetaRaw), utils.TtlKeep); err != nil {
6061
return err
6162
}
6263
}
6364
return nil
6465
}
6566

66-
func (a *DomainAlias) Unbind(domain string) error {
67-
return a.config.Delete("domain/alias/" + domain)
67+
func (a *DomainAlias) Unbind(ctx context.Context, domain string) error {
68+
return a.config.Delete(ctx, "domain/alias/"+domain)
6869
}

pkg/core/backend.go

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package core
22

33
import (
44
"bytes"
5+
"context"
56
"encoding/json"
67
stdErr "errors"
78
"fmt"
@@ -25,11 +26,11 @@ type BranchInfo struct {
2526
type Backend interface {
2627
Close() error
2728
// Repos return repo name + default branch
28-
Repos(owner string) (map[string]string, error)
29+
Repos(ctx context.Context, owner string) (map[string]string, error)
2930
// Branches return branch + commit id
30-
Branches(owner, repo string) (map[string]*BranchInfo, error)
31+
Branches(ctx context.Context, owner, repo string) (map[string]*BranchInfo, error)
3132
// Open return file or error (error)
32-
Open(client *http.Client, owner, repo, commit, path string, headers http.Header) (*http.Response, error)
33+
Open(ctx context.Context, client *http.Client, owner, repo, commit, path string, headers http.Header) (*http.Response, error)
3334
}
3435

3536
type CacheBackend struct {
@@ -46,23 +47,23 @@ func NewCacheBackend(backend Backend, config utils.KVConfig, ttl time.Duration)
4647
return &CacheBackend{backend: backend, config: config, ttl: ttl}
4748
}
4849

49-
func (c *CacheBackend) Repos(owner string) (map[string]string, error) {
50+
func (c *CacheBackend) Repos(ctx context.Context, owner string) (map[string]string, error) {
5051
ret := make(map[string]string)
5152
key := fmt.Sprintf("repos/%s", owner)
52-
store, err := c.config.Get(key)
53+
store, err := c.config.Get(ctx, key)
5354
if err != nil {
54-
ret, err = c.backend.Repos(owner)
55+
ret, err = c.backend.Repos(ctx, owner)
5556
if err != nil {
5657
if errors.Is(err, os.ErrNotExist) {
57-
_ = c.config.Put(key, "{}", c.ttl)
58+
_ = c.config.Put(ctx, key, "{}", c.ttl)
5859
}
5960
return nil, err
6061
}
6162
storeBin, err := json.Marshal(ret)
6263
if err != nil {
6364
return nil, err
6465
}
65-
if err = c.config.Put(key, string(storeBin), c.ttl); err != nil {
66+
if err = c.config.Put(ctx, key, string(storeBin), c.ttl); err != nil {
6667
return nil, err
6768
}
6869
} else {
@@ -76,23 +77,23 @@ func (c *CacheBackend) Repos(owner string) (map[string]string, error) {
7677
return ret, nil
7778
}
7879

79-
func (c *CacheBackend) Branches(owner, repo string) (map[string]*BranchInfo, error) {
80+
func (c *CacheBackend) Branches(ctx context.Context, owner, repo string) (map[string]*BranchInfo, error) {
8081
ret := make(map[string]*BranchInfo)
8182
key := fmt.Sprintf("branches/%s/%s", owner, repo)
82-
data, err := c.config.Get(key)
83+
data, err := c.config.Get(ctx, key)
8384
if err != nil {
84-
ret, err = c.backend.Branches(owner, repo)
85+
ret, err = c.backend.Branches(ctx, owner, repo)
8586
if err != nil {
8687
if errors.Is(err, os.ErrNotExist) {
87-
_ = c.config.Put(key, "{}", c.ttl)
88+
_ = c.config.Put(ctx, key, "{}", c.ttl)
8889
}
8990
return nil, err
9091
}
9192
data, err := json.Marshal(ret)
9293
if err != nil {
9394
return nil, err
9495
}
95-
if err = c.config.Put(key, string(data), c.ttl); err != nil {
96+
if err = c.config.Put(ctx, key, string(data), c.ttl); err != nil {
9697
return nil, err
9798
}
9899
} else {
@@ -106,8 +107,8 @@ func (c *CacheBackend) Branches(owner, repo string) (map[string]*BranchInfo, err
106107
return ret, nil
107108
}
108109

109-
func (c *CacheBackend) Open(client *http.Client, owner, repo, commit, path string, headers http.Header) (*http.Response, error) {
110-
return c.backend.Open(client, owner, repo, commit, path, headers)
110+
func (c *CacheBackend) Open(ctx context.Context, client *http.Client, owner, repo, commit, path string, headers http.Header) (*http.Response, error) {
111+
return c.backend.Open(ctx, client, owner, repo, commit, path, headers)
111112
}
112113

113114
type CacheBackendBlobReader struct {
@@ -121,7 +122,7 @@ func NewCacheBackendBlobReader(client *http.Client, base Backend, cache utils.Ca
121122
return &CacheBackendBlobReader{client: client, base: base, cache: cache, maxSize: maxCacheSize}
122123
}
123124

124-
func (c *CacheBackendBlobReader) Open(owner, repo, commit, path string) (io.ReadCloser, error) {
125+
func (c *CacheBackendBlobReader) Open(ctx context.Context, owner, repo, commit, path string) (io.ReadCloser, error) {
125126
key := fmt.Sprintf("%s/%s/%s/%s", owner, repo, commit, path)
126127
lastCache, err := c.cache.Get(key)
127128
if err != nil && !errors.Is(err, os.ErrNotExist) {
@@ -132,7 +133,7 @@ func (c *CacheBackendBlobReader) Open(owner, repo, commit, path string) (io.Read
132133
} else if lastCache != nil {
133134
return lastCache, nil
134135
}
135-
open, err := c.base.Open(c.client, owner, repo, commit, path, http.Header{})
136+
open, err := c.base.Open(ctx, c.client, owner, repo, commit, path, http.Header{})
136137
if err != nil || open == nil {
137138
if open != nil {
138139
_ = open.Body.Close()

pkg/core/domain.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package core
22

33
import (
4+
"context"
45
"os"
56
"strings"
67

@@ -36,19 +37,19 @@ type PageDomainContent struct {
3637
Path string
3738
}
3839

39-
func (p *PageDomain) ParseDomainMeta(domain, path, branch string) (*PageDomainContent, error) {
40+
func (p *PageDomain) ParseDomainMeta(ctx context.Context, domain, path, branch string) (*PageDomainContent, error) {
4041
if branch == "" {
4142
branch = p.defaultBranch
4243
}
4344
pathArr := strings.Split(strings.TrimPrefix(path, "/"), "/")
4445
if !strings.HasSuffix(domain, "."+p.baseDomain) {
45-
alias, err := p.alias.Query(domain) // 确定 alias 是否存在内容
46+
alias, err := p.alias.Query(ctx, domain) // 确定 alias 是否存在内容
4647
if err != nil {
4748
zap.L().Warn("未知域名", zap.String("base", p.baseDomain), zap.String("domain", domain), zap.Error(err))
4849
return nil, os.ErrNotExist
4950
}
5051
zap.L().Debug("命中别名", zap.String("domain", domain), zap.Any("alias", alias))
51-
return p.ReturnMeta(alias.Owner, alias.Repo, alias.Branch, pathArr)
52+
return p.ReturnMeta(ctx, alias.Owner, alias.Repo, alias.Branch, pathArr)
5253
}
5354
owner := strings.TrimSuffix(domain, "."+p.baseDomain)
5455
repo := pathArr[0]
@@ -57,27 +58,27 @@ func (p *PageDomain) ParseDomainMeta(domain, path, branch string) (*PageDomainCo
5758
if repo == "" {
5859
// 回退到默认仓库 (路径未包含仓库)
5960
zap.L().Debug("fail back to default repo", zap.String("repo", domain))
60-
returnMeta, err = p.ReturnMeta(owner, domain, branch, pathArr)
61+
returnMeta, err = p.ReturnMeta(ctx, owner, domain, branch, pathArr)
6162
} else {
62-
returnMeta, err = p.ReturnMeta(owner, repo, branch, pathArr[1:])
63+
returnMeta, err = p.ReturnMeta(ctx, owner, repo, branch, pathArr[1:])
6364
}
6465
if err != nil && !errors.Is(err, os.ErrNotExist) {
6566
return nil, err
6667
} else if err == nil {
6768
return returnMeta, nil
6869
}
6970
// 发现 repo 的情况下回退到默认页面
70-
return p.ReturnMeta(owner, domain, branch, pathArr)
71+
return p.ReturnMeta(ctx, owner, domain, branch, pathArr)
7172
}
7273

73-
func (p *PageDomain) ReturnMeta(owner string, repo string, branch string, path []string) (*PageDomainContent, error) {
74+
func (p *PageDomain) ReturnMeta(ctx context.Context, owner string, repo string, branch string, path []string) (*PageDomainContent, error) {
7475
rel := &PageDomainContent{}
75-
if meta, err := p.GetMeta(owner, repo, branch); err == nil {
76+
if meta, err := p.GetMeta(ctx, owner, repo, branch); err == nil {
7677
rel.PageMetaContent = meta
7778
rel.Owner = owner
7879
rel.Repo = repo
7980
rel.Path = strings.Join(path, "/")
80-
if err = p.alias.Bind(meta.Alias, rel.Owner, rel.Repo, branch); err != nil {
81+
if err = p.alias.Bind(ctx, meta.Alias, rel.Owner, rel.Repo, branch); err != nil {
8182
zap.L().Warn("别名绑定失败", zap.Error(err))
8283
return nil, err
8384
}

pkg/core/meta.go

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package core
22

33
import (
4+
"context"
45
"fmt"
56
"io"
67
"net/http"
@@ -39,9 +40,9 @@ func NewServerMeta(client *http.Client, backend Backend, kv utils.KVConfig, doma
3940
return &ServerMeta{backend, domain, client, kv, ttl, utils.NewLocker()}
4041
}
4142

42-
func (s *ServerMeta) GetMeta(owner, repo, branch string) (*PageMetaContent, error) {
43+
func (s *ServerMeta) GetMeta(ctx context.Context, owner, repo, branch string) (*PageMetaContent, error) {
4344
rel := NewPageMetaContent()
44-
if repos, err := s.Repos(owner); err != nil {
45+
if repos, err := s.Repos(ctx, owner); err != nil {
4546
return nil, err
4647
} else {
4748
defBranch := repos[repo]
@@ -52,7 +53,7 @@ func (s *ServerMeta) GetMeta(owner, repo, branch string) (*PageMetaContent, erro
5253
branch = defBranch
5354
}
5455
}
55-
if branches, err := s.Branches(owner, repo); err != nil {
56+
if branches, err := s.Branches(ctx, owner, repo); err != nil {
5657
return nil, err
5758
} else {
5859
info := branches[branch]
@@ -64,7 +65,7 @@ func (s *ServerMeta) GetMeta(owner, repo, branch string) (*PageMetaContent, erro
6465
}
6566

6667
key := fmt.Sprintf("meta/%s/%s/%s", owner, repo, branch)
67-
cache, err := s.cache.Get(key)
68+
cache, err := s.cache.Get(ctx, key)
6869
if err != nil && !errors.Is(err, os.ErrNotExist) {
6970
return nil, err
7071
}
@@ -79,7 +80,7 @@ func (s *ServerMeta) GetMeta(owner, repo, branch string) (*PageMetaContent, erro
7980
mux := s.locker.Open(key)
8081
mux.Lock()
8182
defer mux.Unlock()
82-
cache, err = s.cache.Get(key)
83+
cache, err = s.cache.Get(ctx, key)
8384
if err == nil {
8485
if err = rel.From(cache); err == nil {
8586
if !rel.IsPage {
@@ -90,25 +91,25 @@ func (s *ServerMeta) GetMeta(owner, repo, branch string) (*PageMetaContent, erro
9091
}
9192

9293
// 确定存在 index.html , 否则跳过
93-
if find, _ := s.FileExists(owner, repo, rel.CommitID, "index.html"); !find {
94+
if find, _ := s.FileExists(ctx, owner, repo, rel.CommitID, "index.html"); !find {
9495
rel.IsPage = false
95-
_ = s.cache.Put(key, rel.String(), s.ttl)
96+
_ = s.cache.Put(ctx, key, rel.String(), s.ttl)
9697
return nil, os.ErrNotExist
9798
} else {
9899
rel.IsPage = true
99100
}
100101
errFunc := func(err error) (*PageMetaContent, error) {
101102
rel.IsPage = false
102103
rel.ErrorMsg = err.Error()
103-
_ = s.cache.Put(key, rel.String(), s.ttl)
104+
_ = s.cache.Put(ctx, key, rel.String(), s.ttl)
104105
return nil, err
105106
}
106107
// 添加默认跳过的内容
107108
for _, defIgnore := range rel.Ignore {
108109
rel.ignoreL = append(rel.ignoreL, glob.MustCompile(defIgnore))
109110
}
110111
// 解析配置
111-
if data, err := s.ReadString(owner, repo, rel.CommitID, ".pages.yaml"); err == nil {
112+
if data, err := s.ReadString(ctx, owner, repo, rel.CommitID, ".pages.yaml"); err == nil {
112113
cfg := new(PageConfig)
113114
if err = yaml.Unmarshal([]byte(data), cfg); err != nil {
114115
return errFunc(err)
@@ -172,7 +173,7 @@ func (s *ServerMeta) GetMeta(owner, repo, branch string) (*PageMetaContent, erro
172173
}
173174

174175
// 兼容 github 的 CNAME 模式
175-
if cname, err := s.ReadString(owner, repo, rel.CommitID, "CNAME"); err == nil {
176+
if cname, err := s.ReadString(ctx, owner, repo, rel.CommitID, "CNAME"); err == nil {
176177
cname = strings.TrimSpace(cname)
177178
if regexpHostname.MatchString(cname) && !strings.HasSuffix(strings.ToLower(cname), strings.ToLower(s.Domain)) {
178179
rel.Alias = append(rel.Alias, cname)
@@ -182,12 +183,12 @@ func (s *ServerMeta) GetMeta(owner, repo, branch string) (*PageMetaContent, erro
182183
}
183184
rel.Alias = utils.ClearDuplicates(rel.Alias)
184185
rel.Ignore = utils.ClearDuplicates(rel.Ignore)
185-
_ = s.cache.Put(key, rel.String(), s.ttl)
186+
_ = s.cache.Put(ctx, key, rel.String(), s.ttl)
186187
return rel, nil
187188
}
188189

189-
func (s *ServerMeta) ReadString(owner, repo, branch, path string) (string, error) {
190-
resp, err := s.Open(s.client, owner, repo, branch, path, nil)
190+
func (s *ServerMeta) ReadString(ctx context.Context, owner, repo, branch, path string) (string, error) {
191+
resp, err := s.Open(ctx, s.client, owner, repo, branch, path, nil)
191192
if resp != nil {
192193
defer resp.Body.Close()
193194
}
@@ -204,8 +205,8 @@ func (s *ServerMeta) ReadString(owner, repo, branch, path string) (string, error
204205
return string(all), nil
205206
}
206207

207-
func (s *ServerMeta) FileExists(owner, repo, branch, path string) (bool, error) {
208-
resp, err := s.Open(s.client, owner, repo, branch, path, nil)
208+
func (s *ServerMeta) FileExists(ctx context.Context, owner, repo, branch, path string) (bool, error) {
209+
resp, err := s.Open(ctx, s.client, owner, repo, branch, path, nil)
209210
if resp != nil {
210211
defer resp.Body.Close()
211212
}

pkg/providers/gitea.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package providers
22

33
import (
4+
"context"
45
"net/http"
56
"net/url"
67
"os"
@@ -31,7 +32,7 @@ func NewGitea(url string, token string) (*ProviderGitea, error) {
3132
}, nil
3233
}
3334

34-
func (g *ProviderGitea) Repos(owner string) (map[string]string, error) {
35+
func (g *ProviderGitea) Repos(ctx context.Context, owner string) (map[string]string, error) {
3536
result := make(map[string]string)
3637
if repos, resp, err := g.gitea.ListOrgRepos(owner, gitea.ListOrgReposOptions{
3738
ListOptions: gitea.ListOptions{
@@ -74,7 +75,7 @@ func (g *ProviderGitea) Repos(owner string) (map[string]string, error) {
7475
return result, nil
7576
}
7677

77-
func (g *ProviderGitea) Branches(owner, repo string) (map[string]*core.BranchInfo, error) {
78+
func (g *ProviderGitea) Branches(ctx context.Context, owner, repo string) (map[string]*core.BranchInfo, error) {
7879
result := make(map[string]*core.BranchInfo)
7980
if branches, resp, err := g.gitea.ListRepoBranches(owner, repo, gitea.ListRepoBranchesOptions{
8081
ListOptions: gitea.ListOptions{
@@ -102,7 +103,7 @@ func (g *ProviderGitea) Branches(owner, repo string) (map[string]*core.BranchInf
102103
return result, nil
103104
}
104105

105-
func (g *ProviderGitea) Open(client *http.Client, owner, repo, commit, path string, headers http.Header) (*http.Response, error) {
106+
func (g *ProviderGitea) Open(ctx context.Context, client *http.Client, owner, repo, commit, path string, headers http.Header) (*http.Response, error) {
106107
giteaURL, err := url.JoinPath(g.BaseUrl, "api/v1/repos", owner, repo, "media", path)
107108
if err != nil {
108109
return nil, err

0 commit comments

Comments
 (0)