From 6456d162fb433faaa8780af985be1891892c735f Mon Sep 17 00:00:00 2001 From: Xiaoxuan Wang <103478229+wangxiaoxuan273@users.noreply.github.com> Date: Mon, 2 Oct 2023 22:11:45 +0800 Subject: [PATCH] feat: support deletion for memory resolver (#607) Part 2/4 of #454 Based on draft PR #582 --------- Signed-off-by: Xiaoxuan Wang Co-authored-by: Terry Howe --- internal/resolver/memory.go | 5 +++++ internal/resolver/memory_test.go | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/internal/resolver/memory.go b/internal/resolver/memory.go index 6fac5e2d..2111d504 100644 --- a/internal/resolver/memory.go +++ b/internal/resolver/memory.go @@ -48,6 +48,11 @@ func (m *Memory) Tag(_ context.Context, desc ocispec.Descriptor, reference strin return nil } +// Untag removes a reference from index map. +func (m *Memory) Untag(reference string) { + m.index.Delete(reference) +} + // Map dumps the memory into a built-in map structure. // Like other operations, calling Map() is go-routine safe. However, it does not // necessarily correspond to any consistent snapshot of the storage contents. diff --git a/internal/resolver/memory_test.go b/internal/resolver/memory_test.go index eb9e1e56..f6f04b06 100644 --- a/internal/resolver/memory_test.go +++ b/internal/resolver/memory_test.go @@ -54,6 +54,15 @@ func TestMemorySuccess(t *testing.T) { if got := len(s.Map()); got != 1 { t.Errorf("Memory.Map() = %v, want %v", got, 1) } + + s.Untag(ref) + _, err = s.Resolve(ctx, ref) + if !errors.Is(err, errdef.ErrNotFound) { + t.Errorf("Memory.Resolve() error = %v, want %v", err, errdef.ErrNotFound) + } + if got := len(s.Map()); got != 0 { + t.Errorf("Memory.Map() = %v, want %v", got, 0) + } } func TestMemoryNotFound(t *testing.T) {