Update cache after tagging, so the cache reflects the updated version of

the source code.
This commit is contained in:
Marcin Bilski 2022-01-19 12:16:56 +01:00
parent 0837c80915
commit 4e2759e69f
2 changed files with 22 additions and 1 deletions

View File

@ -226,6 +226,12 @@ func (api *api) module(ctx context.Context, module string, version vcs.Version)
api.semc <- struct{}{} api.semc <- struct{}{}
defer func() { <-api.semc }() defer func() { <-api.semc }()
return api.store(ctx, module, version)
}
func (api *api) store(ctx context.Context, module string, version vcs.Version) ([]byte, time.Time, error) {
api.log("api.store", "module", module, "version", version.String())
timestamp, err := api.vcs(ctx, module).Timestamp(ctx, version) timestamp, err := api.vcs(ctx, module).Timestamp(ctx, version)
if err != nil { if err != nil {
return nil, time.Time{}, err return nil, time.Time{}, err
@ -355,10 +361,21 @@ func (api *api) tag(w http.ResponseWriter, r *http.Request, module, version stri
return return
} }
// wait for semaphore
api.semc <- struct{}{}
defer func() { <-api.semc }()
err = taggable.Tag(r.Context(), vcs.Version(version), req.Short) err = taggable.Tag(r.Context(), vcs.Version(version), req.Short)
if err != nil { if err != nil {
api.log("api.tag", "module", module, "version", version, "error", err) api.log("api.tag", "module", module, "version", version, "error", err)
http.Error(w, err.Error(), http.StatusBadRequest) http.Error(w, err.Error(), http.StatusBadRequest)
return return
} }
_, _, err = api.store(r.Context(), module, vcs.Version(version))
if err != nil {
api.log("api.tag", "module", module, "version", version, "error", err)
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
} }

View File

@ -82,6 +82,7 @@ func (v *taggableVCS) Tag(ctx context.Context, semVer Version, short string) err
if versionExists(remoteVersions, semVer) { if versionExists(remoteVersions, semVer) {
return fmt.Errorf("remote version %s already exists for module %s", semVer, v.module) return fmt.Errorf("remote version %s already exists for module %s", semVer, v.module)
} }
v.wrapped.log("taggableVCS.Tag", "version", semVer, "short", short)
return v.storage.Tag(v.module, semVer, short) return v.storage.Tag(v.module, semVer, short)
} }
@ -92,7 +93,10 @@ func (v *taggableVCS) List(ctx context.Context) ([]Version, error) {
} }
tags := v.storage.tags(v.module) tags := v.storage.tags(v.module)
// Remote versions win. // Remote versions win.
return appendEphemeralVersion(remoteVersions, tags...), nil allVersions := appendEphemeralVersion(remoteVersions, tags...)
// TODO(bilus): BUG - tag version 1.0.0 and then 0.1.0 - 0.1.0 is the "latest".
// sort.Slice(allVersions, func(i, j) bool { return allVersions[i].Before(allVersions[j]) })
return allVersions, nil
} }
func appendEphemeralVersion(versions []Version, tags ...ephemeralTag) []Version { func appendEphemeralVersion(versions []Version, tags ...ephemeralTag) []Version {