aboutsummaryrefslogtreecommitdiffstats
path: root/entity
diff options
context:
space:
mode:
Diffstat (limited to 'entity')
-rw-r--r--entity/dag/entity_actions.go28
-rw-r--r--entity/dag/entity_actions_test.go25
2 files changed, 51 insertions, 2 deletions
diff --git a/entity/dag/entity_actions.go b/entity/dag/entity_actions.go
index 6f6fe45c..fa50473c 100644
--- a/entity/dag/entity_actions.go
+++ b/entity/dag/entity_actions.go
@@ -228,6 +228,30 @@ func merge(def Definition, repo repository.ClockedRepo, remoteRef string, author
return entity.NewMergeUpdatedStatus(id, localEntity)
}
-func Remove() error {
- panic("")
+// Remove delete an Entity.
+// Remove is idempotent.
+func Remove(def Definition, repo repository.ClockedRepo, id entity.Id) error {
+ var matches []string
+
+ ref := fmt.Sprintf("refs/%s/%s", def.namespace, id.String())
+ matches = append(matches, ref)
+
+ remotes, err := repo.GetRemotes()
+ if err != nil {
+ return err
+ }
+
+ for remote := range remotes {
+ ref = fmt.Sprintf("refs/remotes/%s/%s/%s", remote, def.namespace, id.String())
+ matches = append(matches, ref)
+ }
+
+ for _, ref = range matches {
+ err = repo.RemoveRef(ref)
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
}
diff --git a/entity/dag/entity_actions_test.go b/entity/dag/entity_actions_test.go
index 78baf41f..79afe525 100644
--- a/entity/dag/entity_actions_test.go
+++ b/entity/dag/entity_actions_test.go
@@ -385,3 +385,28 @@ func TestMerge(t *testing.T) {
// fast-forward
assertEqualRefs(t, repoA, repoB, "refs/"+def.namespace)
}
+
+func TestRemove(t *testing.T) {
+ repoA, repoB, remote, id1, _, def := makeTestContextRemote(t)
+ defer repository.CleanupTestRepos(repoA, repoB, remote)
+
+ e := New(def)
+ e.Append(newOp1(id1, "foo"))
+ require.NoError(t, e.Commit(repoA))
+
+ _, err := Push(def, repoA, "remote")
+ require.NoError(t, err)
+
+ err = Remove(def, repoA, e.Id())
+ require.NoError(t, err)
+
+ _, err = Read(def, repoA, e.Id())
+ require.Error(t, err)
+
+ _, err = readRemote(def, repoA, "remote", e.Id())
+ require.Error(t, err)
+
+ // Remove is idempotent
+ err = Remove(def, repoA, e.Id())
+ require.NoError(t, err)
+}