refac: atomic merge, lost-update race, RunPurge cost, duplicated walks
This commit is contained in:
1 parent
0fc3511e2b
commit
074944c99a
45 files changed
+2204
-267
No files matched your search
@@ -24,26 +24,18 @@ func typedEntry(owner contenttype.ContentType, record entry.Entry, resolver *med
|
||||
|
||||
func ensureMediaExists(images image.Repository, owner contenttype.ContentType, data map[string]any, stored map[string]any) error {
|
||||
storedIDs := entry.MediaIDs(owner.Fields, stored)
|
||||
for _, field := range contenttype.MediaFields(owner.Fields) {
|
||||
id, set := contenttype.MediaID(data[field.Key])
|
||||
if !set {
|
||||
for _, ref := range contenttype.MediaRefs(owner.Fields, data) {
|
||||
unchanged := stored != nil && storedIDs[ref.Field.Key] == ref.ID
|
||||
if unchanged && !ref.Field.Required {
|
||||
continue
|
||||
}
|
||||
unchanged := stored != nil && storedIDs[field.Key] == id
|
||||
if unchanged && !field.Required {
|
||||
continue
|
||||
}
|
||||
exists, err := imageExists(images, id)
|
||||
exists, err := imageExists(images, ref.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if exists {
|
||||
continue
|
||||
if !exists {
|
||||
return entry.MissingMedia(ref.Field, unchanged)
|
||||
}
|
||||
if unchanged {
|
||||
return entry.InvalidField(field.Key, entry.RuleRequired)
|
||||
}
|
||||
return entry.InvalidField(field.Key, contenttype.RuleType)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user