Delete modules in case of breaking changes or invalid checksums, compatibility with go mod download (#10)

* add module invalidation via DELETE request
* add go mod download vcs provider
This commit is contained in:
Serge Zaitsev
2019-10-07 08:10:02 +02:00
committed by GitHub
parent 0868adad0a
commit 7a37ec05c4
7 changed files with 181 additions and 61 deletions

View File

@@ -47,4 +47,15 @@ func (d disk) Get(ctx context.Context, module string, version vcs.Version) (Snap
return s, err
}
func (d disk) Del(ctx context.Context, module string, version vcs.Version) error {
dir := string(d)
s := Snapshot{Module: module, Version: version}
err := os.Remove(filepath.Join(dir, s.Key()+".time"))
if err != nil {
return err
}
err = os.Remove(filepath.Join(dir, s.Key()+".zip"))
return err
}
func (d disk) Close() error { return nil }

View File

@@ -45,17 +45,41 @@ func (m *memory) Put(ctx context.Context, snapshot Snapshot) error {
func (m *memory) Get(ctx context.Context, module string, version vcs.Version) (Snapshot, error) {
m.Lock()
defer m.Unlock()
return m.lookup(module, version)
item, err := m.lookup(module, version)
if err != nil {
return Snapshot{}, err
}
return item.Snapshot, nil
}
func (m *memory) lookup(module string, version vcs.Version) (Snapshot, error) {
func (m *memory) Del(ctx context.Context, module string, version vcs.Version) error {
m.Lock()
defer m.Unlock()
item, err := m.lookup(module, version)
if err != nil {
return err
}
if item.prev == nil {
m.head = item.next
} else {
item.prev.next = item.next
}
if item.next == nil {
m.tail = item.prev
} else {
item.next.prev = item.prev
}
return nil
}
func (m *memory) lookup(module string, version vcs.Version) (*lruItem, error) {
for item := m.head; item != nil; item = item.next {
if item.Module == module && item.Version == version {
m.update(item)
return item.Snapshot, nil
return item, nil
}
}
return Snapshot{}, errors.New("not found")
return nil, errors.New("not found")
}
func (m *memory) insert(item *lruItem) {

View File

@@ -14,6 +14,7 @@ type logger = func(...interface{})
type Store interface {
Put(ctx context.Context, snapshot Snapshot) error
Get(ctx context.Context, module string, version vcs.Version) (Snapshot, error)
Del(ctx context.Context, module string, version vcs.Version) error
Close() error
}