Skip to content

Commit

Permalink
Merge pull request #4 from jbowes/refresh-cache
Browse files Browse the repository at this point in the history
Refresh the cache check time when results don't change
  • Loading branch information
jbowes committed Aug 11, 2021
2 parents 12c7836 + 24f6e7a commit 2ceed16
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 29 deletions.
2 changes: 2 additions & 0 deletions impl/file.go
Expand Up @@ -21,6 +21,7 @@ func (f *FileCacher) Get(context.Context) (*Info, error) {
if err != nil {
return nil, err
}
defer r.Close()

var i Info
dec := json.NewDecoder(r)
Expand All @@ -34,6 +35,7 @@ func (f *FileCacher) Set(_ context.Context, i *Info) error {
if err != nil {
return err
}
defer w.Close()

enc := json.NewEncoder(w)
enc.SetIndent("", " ")
Expand Down
65 changes: 36 additions & 29 deletions whatsnew.go
Expand Up @@ -132,43 +132,50 @@ func doWork(ctx context.Context, opts *Options) (string, error) {

nextVer := opts.Version
if now.Sub(i.CheckTime) < opts.Frequency {
if cmp(nextVer, i.Version) < 0 {
nextVer = i.Version
}
nextVer = i.Version
} else {
rels, etag, err := opts.Releaser.Get(ctx, i.Etag)
// If we error, fall back to possibly using the value from the store
if err != nil || len(rels) == 0 {
if cmp(nextVer, i.Version) < 0 {
return i.Version, nil
if err != nil {
// If we error, fall back to possibly using the value from the store
nextVer = i.Version
} else if len(rels) == 0 {
// Cached result. refresh the checktime and store.
_ = opts.Cacher.Set(ctx, &impl.Info{
CheckTime: now,
Etag: etag,
Version: i.Version,
})

nextVer = i.Version
} else {
// find the biggest non-prerelease version in releases.
// TODO: could look at more than the first page. would only matter
// for concurrent patch releases etc.
var newVer string
for _, rel := range rels {
switch {
case rel.Draft:
case !isValid(rel.TagName):
case rel.Prerelease || isPrerelease(rel.TagName):
case cmp(newVer, rel.TagName) < 0:
newVer = rel.TagName
}
}
}
// find the biggest non-prerelease version in releases.
// TODO: could look at more than the first page. would only matter
// for concurrent patch releases etc.
var newVer string
for _, rel := range rels {
switch {
case rel.Draft:
case !isValid(rel.TagName):
case rel.Prerelease || isPrerelease(rel.TagName):
case cmp(newVer, rel.TagName) < 0:
newVer = rel.TagName

if cmp(nextVer, newVer) < 1 {
nextVer = newVer
}
}

if cmp(nextVer, newVer) < 1 {
nextVer = newVer
// TODO: make sure newVer is set
_ = opts.Cacher.Set(ctx, &impl.Info{
CheckTime: now,
Etag: etag,
Version: newVer, // we store the latest from the remote ignoring whats installed.
})
}

_ = opts.Cacher.Set(ctx, &impl.Info{
CheckTime: now,
Etag: etag,
Version: newVer, // we store the latest from the remote ignoring whats installed.
})
}

if cmp(opts.Version, nextVer) == 0 {
if cmp(opts.Version, nextVer) >= 0 {
return "", nil
}

Expand Down

0 comments on commit 2ceed16

Please sign in to comment.