mirror of
https://github.com/gomods/athens
synced 2026-02-03 13:20:30 +00:00
making <version>.info work
This commit is contained in:
+8
-5
@@ -32,7 +32,10 @@ func init() {
|
||||
log.Fatalf("GOPATH is not set!")
|
||||
}
|
||||
gopath = g
|
||||
storageReader = &memory.Lister{}
|
||||
storageReader = storage.Reader{
|
||||
Lister: &memory.Lister{},
|
||||
Versioner: &memory.Versioner{},
|
||||
}
|
||||
storageWriter = &memory.Saver{}
|
||||
}
|
||||
|
||||
@@ -76,10 +79,10 @@ func App() *buffalo.App {
|
||||
|
||||
app.GET("/all", allHandler(storageReader))
|
||||
app.GET("/{base_url:.+}/{module}/@v/list", listHandler(storageReader))
|
||||
app.GET("/{base_url:.+}/{module}/@v/{ver}.info", versionInfoHandler)
|
||||
app.GET("/{base_url:.+}/{module}/@v/{ver}.mod", versionModuleHandler)
|
||||
app.GET("/{base_url:.+}/{module}/@v/{ver}.zip", versionZipHandler)
|
||||
app.POST("/admin/upload/{base_url:[a-zA-Z./]+}/{module}/{ver}", uploadHandler(storageWriter))
|
||||
app.GET("/{base_url:.+}/{module}/@v/{version}.info", versionInfoHandler(storageReader))
|
||||
app.GET("/{base_url:.+}/{module}/@v/{version}.mod", versionModuleHandler)
|
||||
app.GET("/{base_url:.+}/{module}/@v/{version}.zip", versionZipHandler)
|
||||
app.POST("/admin/upload/{base_url:[a-zA-Z./]+}/{module}/{version}", uploadHandler(storageWriter))
|
||||
|
||||
// serve files from the public directory:
|
||||
app.ServeFiles("/", assetsBox)
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ func uploadHandler(store storage.Saver) func(c buffalo.Context) error {
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
version := c.Param("ver")
|
||||
version := c.Param("version")
|
||||
payload := new(payloads.Upload)
|
||||
if c.Bind(payload); err != nil {
|
||||
return errors.WithStack(err)
|
||||
|
||||
+20
-2
@@ -1,9 +1,27 @@
|
||||
package actions
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"github.com/arschles/vgoprox/pkg/storage"
|
||||
"github.com/gobuffalo/buffalo"
|
||||
)
|
||||
|
||||
func versionInfoHandler(c buffalo.Context) error {
|
||||
return nil
|
||||
func versionInfoHandler(versioner storage.Versioner) func(c buffalo.Context) error {
|
||||
return func(c buffalo.Context) error {
|
||||
stdParams, err := getStandardParams(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
version := c.Param("version")
|
||||
if version == "" {
|
||||
return fmt.Errorf("version not found")
|
||||
}
|
||||
revInfo, err := versioner.Info(stdParams.baseURL, stdParams.module, version)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return c.Render(http.StatusOK, r.JSON(revInfo))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
package memory
|
||||
|
||||
import (
|
||||
"github.com/arschles/vgoprox/pkg/storage"
|
||||
)
|
||||
|
||||
type Versioner struct{}
|
||||
|
||||
func (v *Versioner) Info(baseURL, module, vsn string) (*storage.RevInfo, error) {
|
||||
entries.RLock()
|
||||
defer entries.RUnlock()
|
||||
key := entries.key(baseURL, module)
|
||||
versions := entries.versions[key]
|
||||
for _, version := range versions {
|
||||
if version.info.Version == vsn {
|
||||
return &version.info, nil
|
||||
}
|
||||
}
|
||||
return nil, &storage.ErrVersionNotFound{
|
||||
NotFoundErr: storage.NotFoundErr{
|
||||
BasePath: baseURL,
|
||||
Module: module,
|
||||
},
|
||||
Version: vsn,
|
||||
}
|
||||
|
||||
}
|
||||
@@ -9,6 +9,11 @@ type NotFoundErr struct {
|
||||
Module string
|
||||
}
|
||||
|
||||
type ErrVersionNotFound struct {
|
||||
NotFoundErr
|
||||
Version string
|
||||
}
|
||||
|
||||
func (n NotFoundErr) Error() string {
|
||||
return fmt.Sprintf("%s/%s not found", n.BasePath, n.Module)
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package storage
|
||||
|
||||
type Reader interface {
|
||||
type Reader struct {
|
||||
Lister
|
||||
Versioner
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
package storage
|
||||
|
||||
type Versioner interface {
|
||||
// must return NotFoundErr if the coordinates are not found
|
||||
Info(baseURL, module, version string) (*RevInfo, error)
|
||||
}
|
||||
Reference in New Issue
Block a user