summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-05-16 00:59:39 +0300
committerPaul Buetow <paul@buetow.org>2024-05-16 00:59:39 +0300
commit5b448c4ecf176983f73bfd5d4e1980f6ac509403 (patch)
tree3bc362534acb337629aa8a631906250b179e2e49 /internal
parentdc6f16912693a7a95d7375f08d42600ea2ce130e (diff)
more on this
Diffstat (limited to 'internal')
-rw-r--r--internal/server/repository/repository.go8
-rw-r--r--internal/types/entry.go29
2 files changed, 24 insertions, 13 deletions
diff --git a/internal/server/repository/repository.go b/internal/server/repository/repository.go
index d2a9a9e..f83175f 100644
--- a/internal/server/repository/repository.go
+++ b/internal/server/repository/repository.go
@@ -95,16 +95,16 @@ func (r Repository) HasEntry(pair EntryPair) bool {
return true
}
-func (r Repository) Merge(new types.Entry) {
+func (r Repository) Merge(newEntry types.Entry) {
r.mu.Lock()
defer r.mu.Unlock()
+ oldEntry, ok := r.entries[newEntry.ID]
- old, ok := r.entries[new.ID]
if !ok {
- r.entries[new.ID] = new
+ r.entries[newEntry.ID] = types.NewEntryFromCopy(newEntry)
return
}
- r.entries[new.ID] = old.Update(new)
+ r.entries[newEntry.ID] = oldEntry.Updated(newEntry)
panic("Not yet implemented: shoud write entry also to disk")
}
diff --git a/internal/types/entry.go b/internal/types/entry.go
index fe0b4f5..90b5e6f 100644
--- a/internal/types/entry.go
+++ b/internal/types/entry.go
@@ -30,16 +30,22 @@ type Entry struct {
}
func NewEntry(bytes []byte) (Entry, error) {
- var ent Entry
- if err := json.Unmarshal(bytes, &ent); err != nil {
- return ent, fmt.Errorf("unable to deserialise payload: %w", err)
+ var e Entry
+ if err := json.Unmarshal(bytes, &e); err != nil {
+ return e, fmt.Errorf("unable to deserialise payload: %w", err)
}
- ent.mu = &sync.Mutex{}
- ent.dirty = true
- if ent.ID == "" {
- ent.ID = fmt.Sprintf("%x", sha256.Sum256(bytes))
+ e.initialize()
+ if e.ID == "" {
+ e.ID = fmt.Sprintf("%x", sha256.Sum256(bytes))
}
- return ent, nil
+ return e, nil
+}
+
+// Beware , this is only from a shallow copy!
+func NewEntryFromCopy(other Entry) Entry {
+ e := other
+ e.initialize()
+ return e
}
func NewEntryFromFile(filePath string) (Entry, error) {
@@ -50,7 +56,12 @@ func NewEntryFromFile(filePath string) (Entry, error) {
return NewEntry(bytes)
}
-func (e Entry) Update(new Entry) Entry {
+func (e *Entry) initialize() {
+ e.mu = &sync.Mutex{}
+ e.dirty = true
+}
+
+func (e Entry) Updated(other Entry) Entry {
panic("not yet implemented")
//return e
}