summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--internal/server/repository/repository.go28
-rw-r--r--internal/server/repository/repository_test.go16
2 files changed, 17 insertions, 27 deletions
diff --git a/internal/server/repository/repository.go b/internal/server/repository/repository.go
index 16f1932..25d734f 100644
--- a/internal/server/repository/repository.go
+++ b/internal/server/repository/repository.go
@@ -153,6 +153,8 @@ func (r Repository) add(entry types.Entry) {
}
func (r Repository) persist(entry types.Entry) error {
+ r.add(entry)
+
bytes, err := entry.JSONMarshal()
if err != err {
return err
@@ -160,11 +162,6 @@ func (r Repository) persist(entry types.Entry) error {
return r.fs.WriteFile(r.entryPath(entry), bytes)
}
-func (r Repository) addAndPersist(entry types.Entry) error {
- r.add(entry)
- return r.persist(entry)
-}
-
func (r Repository) Get(id types.EntryID) (types.Entry, error) {
if !r.getIdRe.MatchString(id) {
return types.Entry{}, fmt.Errorf("invalid id %s", id)
@@ -212,11 +209,6 @@ func (r Repository) entryPath(ent types.Entry) string {
return fmt.Sprintf("%s/%s/%s.json", r.conf.DataDir, time.Now().Format("2006"), ent.ID)
}
-func (r Repository) Update(ent types.Entry) error {
- // Update is just an alias for the merge, makes the intention clearer.
- return r.Merge(ent)
-}
-
func (r Repository) Merge(otherEnt types.Entry) error {
if err := r.load(); err != nil {
return err
@@ -232,18 +224,16 @@ func (r Repository) Merge(otherEnt types.Entry) error {
if entry, err = types.NewEntryFromCopy(otherEnt); err != nil {
return err
}
+ return r.persist(entry)
}
- var changed bool
- entry, changed, _ = entry.Update(otherEnt)
- r.add(entry)
-
- if !changed {
- // Hasn't changed, so no need to write anything to file.
- return nil
+ if entry, changed, err := entry.Update(otherEnt); changed {
+ if err != nil {
+ return err
+ }
+ return r.persist(entry)
}
-
- return r.persist(entry)
+ return nil
}
func (r Repository) MergeRemotely(ctx context.Context) error {
diff --git a/internal/server/repository/repository_test.go b/internal/server/repository/repository_test.go
index f78834d..b2f13e3 100644
--- a/internal/server/repository/repository_test.go
+++ b/internal/server/repository/repository_test.go
@@ -18,7 +18,7 @@ func TestRepositoryPutGet(t *testing.T) {
for _, entry := range makeEntries(t) {
t.Run(entry.ID, func(t *testing.T) {
- _ = repo.addAndPersist(entry)
+ _ = repo.persist(entry)
entGot, err := repo.Get(entry.ID)
if err != nil {
t.Error(err)
@@ -69,7 +69,7 @@ func TestRepositoryList(t *testing.T) {
entries := makeEntries(t)
for _, entry := range entries {
- _ = repo.addAndPersist(entry)
+ _ = repo.persist(entry)
}
pairs, _ := repo.List()
@@ -98,7 +98,7 @@ func TestRepositoryHasSameEntry(t *testing.T) {
fs := make(vfs.MemoryFS)
repo := newRepository(server.ServerConfig{DataDir: "./data"}, fs)
entry, _ := makeAnEntry()
- _ = repo.addAndPersist(entry)
+ _ = repo.persist(entry)
pair := entryPair{entry.ID, entry.Checksum()}
if !repo.hasSameEntry(pair) {
@@ -117,7 +117,7 @@ func TestRepositoryMerge(t *testing.T) {
fs := make(vfs.MemoryFS)
repo := newRepository(server.ServerConfig{DataDir: "./data"}, fs)
entry1, _ := makeAnEntry()
- _ = repo.addAndPersist(entry1)
+ _ = repo.persist(entry1)
entry2, _ := makeAnotherEntry()
// Need to have the same IDs so that the entries will actually be merged
@@ -149,9 +149,9 @@ func TestRepositoryMergeFromPartner(t *testing.T) {
repo2 := newRepository(server.ServerConfig{DataDir: "./data2"}, fs2)
entry1, _ := makeAnEntry()
- _ = repo1.addAndPersist(entry1)
+ _ = repo1.persist(entry1)
entry2, _ := makeAnotherEntry()
- _ = repo2.addAndPersist(entry2)
+ _ = repo2.persist(entry2)
getPair := func(ctx context.Context, partner string, pairs *[]entryPair) error {
var (
@@ -263,7 +263,7 @@ func TestRepositoryMergeFromPartner(t *testing.T) {
linkedIn.Is = true
entry.Shared[types.LinkedIn] = linkedIn
- if err := repo1.Update(entry); err != nil {
+ if err := repo1.Merge(entry); err != nil {
t.Error(err)
}
@@ -302,7 +302,7 @@ func TestRepositoryNext(t *testing.T) {
entries := makeEntries(t)
for _, entry := range entries {
- _ = repo.addAndPersist(entry)
+ _ = repo.persist(entry)
}
if entry, ok := repo.Next(types.Mastodon); ok {