From 6a6d2ba8228132434ccb4861c90a3c0862b31d10 Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Wed, 9 Feb 2022 11:41:07 -0700 Subject: [PATCH] tree.get does not include deleted branches --- spike/review/reinvent/ezmded/server/tree.go | 17 +++++++++++- .../reinvent/ezmded/server/tree_test.go | 26 ++++++++++++++++++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/spike/review/reinvent/ezmded/server/tree.go b/spike/review/reinvent/ezmded/server/tree.go index b71ce4c..17edc29 100644 --- a/spike/review/reinvent/ezmded/server/tree.go +++ b/spike/review/reinvent/ezmded/server/tree.go @@ -103,7 +103,7 @@ func (tree Tree) getRoot(withContent bool) (Branch, error) { } else if entry.IsDir() { if branch, err := tree.WithRoot(path.Join(tree.root, entry.Name())).getRoot(withContent); err != nil { return Branch{}, err - } else { + } else if !branch.Leaf.Deleted && !branch.IsZero() { m.Branches[entry.Name()] = branch } } @@ -145,6 +145,21 @@ func (tree Tree) Put(id []string, input Leaf) error { } func (tree Tree) Del(id []string) error { + got, err := tree.Get(id) + if os.IsNotExist(err) { + return nil + } + if err != nil { + return err + } + if got.Deleted { + return nil + } + got.Deleted = true + return tree.Put(id, got) +} + +func (tree Tree) HardDel(id []string) error { os.RemoveAll(tree.toDir(id)) tree.cachedRoot = Branch{} return nil diff --git a/spike/review/reinvent/ezmded/server/tree_test.go b/spike/review/reinvent/ezmded/server/tree_test.go index 11db58a..6b614ae 100644 --- a/spike/review/reinvent/ezmded/server/tree_test.go +++ b/spike/review/reinvent/ezmded/server/tree_test.go @@ -7,6 +7,30 @@ import ( "testing" ) +func TestTreeDel(t *testing.T) { + tree := NewTree(t.TempDir()) + if err := tree.Put([]string{"id"}, Leaf{}); err != nil { + t.Fatal(err) + } + if err := tree.Put([]string{"id", "subid"}, Leaf{}); err != nil { + t.Fatal(err) + } + + if err := tree.Del([]string{"id"}); err != nil { + t.Fatal(err) + } else if got, err := tree.Get([]string{"id"}); err != nil { + t.Fatal(err) + } else if !got.Deleted { + t.Fatal(got) + } + + if root, err := tree.GetRoot(); err != nil { + t.Fatal(err) + } else if len(root.Branches) > 0 { + t.Fatal(root.Branches) + } +} + func TestTreeCrud(t *testing.T) { tree := NewTree(t.TempDir()) @@ -22,7 +46,7 @@ func TestTreeCrud(t *testing.T) { want := Leaf{ Title: "leaf title", - Deleted: true, + Deleted: false, Content: "leaf content", } if err := tree.Put([]string{"id"}, want); err != nil {