diff options
| -rw-r--r-- | internal/server/repository/repository.go | 28 | ||||
| -rw-r--r-- | internal/server/repository/repository_test.go | 16 |
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 { |
