Item 12 of 15 of #168: "Collapse the three storage structs into one". Starts when #317 is squash-merged to next.
Today (next at 989da78)
ContentStorage, VariantStorage and MetadataStorage in internal/imgcache/storage.go each implement the same write-to-temp-file-then-rename, the same two-level directory fan-out and the same load, exists and delete, differing only in who chooses the key and in the .meta file. After #308 and #309 the .meta file and the metadata directory are gone and sources and variants are both named by a key.
Name, recorded here
The one type is FileStore (the proposal in #168): a directory of files named by a hex key.
Definition of done
One type, imgcache.FileStore, writes a file under a temp name, syncs it and renames it into place, opens, reports the size of, and deletes the file for a key, with the two-level fan-out; the cache uses one for sources and one for variants.
ContentStorage, VariantStorage and whatever is left of MetadataStorage are gone; there is one copy of the atomic write.
The startup and periodic checks of cached files keep working on both stores.
Tests of the three old types that test behaviour the one type keeps move to it.
Approval and tests
sneak asked for each main recommendation of #168 to be its own issue, built before 1.0, one at a time in the order listed (#168 (comment)). That instruction is his approval of this item. Existing tests change only as this item needs: they follow code that moves or is renamed, and the tests of code this item removes go with it; no other assertion is weakened or dropped.
Model: opus-5-5
Item 12 of 15 of https://git.eeqj.de/sneak/pixa/issues/168: "Collapse the three storage structs into one". Starts when https://git.eeqj.de/sneak/pixa/issues/317 is squash-merged to `next`.
## Today (`next` at `989da78`)
`ContentStorage`, `VariantStorage` and `MetadataStorage` in `internal/imgcache/storage.go` each implement the same write-to-temp-file-then-rename, the same two-level directory fan-out and the same load, exists and delete, differing only in who chooses the key and in the `.meta` file. After https://git.eeqj.de/sneak/pixa/issues/308 and https://git.eeqj.de/sneak/pixa/issues/309 the `.meta` file and the metadata directory are gone and sources and variants are both named by a key.
## Name, recorded here
The one type is `FileStore` (the proposal in https://git.eeqj.de/sneak/pixa/issues/168): a directory of files named by a hex key.
## Definition of done
- One type, `imgcache.FileStore`, writes a file under a temp name, syncs it and renames it into place, opens, reports the size of, and deletes the file for a key, with the two-level fan-out; the cache uses one for sources and one for variants.
- `ContentStorage`, `VariantStorage` and whatever is left of `MetadataStorage` are gone; there is one copy of the atomic write.
- The startup and periodic checks of cached files keep working on both stores.
- Tests of the three old types that test behaviour the one type keeps move to it.
## Approval and tests
sneak asked for each main recommendation of https://git.eeqj.de/sneak/pixa/issues/168 to be its own issue, built before 1.0, one at a time in the order listed (https://git.eeqj.de/sneak/pixa/issues/168#issuecomment-153513). That instruction is his approval of this item. Existing tests change only as this item needs: they follow code that moves or is renamed, and the tests of code this item removes go with it; no other assertion is weakened or dropped.
Model: opus-5-5
clawbot
added this to the 1.0.0 milestone 2026-10-21 12:51:08 +02:00
clawbot
self-assigned this 2026-10-21 12:51:08 +02:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Item 12 of 15 of #168: "Collapse the three storage structs into one". Starts when #317 is squash-merged to
next.Today (
nextat989da78)ContentStorage,VariantStorageandMetadataStorageininternal/imgcache/storage.goeach implement the same write-to-temp-file-then-rename, the same two-level directory fan-out and the same load, exists and delete, differing only in who chooses the key and in the.metafile. After #308 and #309 the.metafile and the metadata directory are gone and sources and variants are both named by a key.Name, recorded here
The one type is
FileStore(the proposal in #168): a directory of files named by a hex key.Definition of done
imgcache.FileStore, writes a file under a temp name, syncs it and renames it into place, opens, reports the size of, and deletes the file for a key, with the two-level fan-out; the cache uses one for sources and one for variants.ContentStorage,VariantStorageand whatever is left ofMetadataStorageare gone; there is one copy of the atomic write.Approval and tests
sneak asked for each main recommendation of #168 to be its own issue, built before 1.0, one at a time in the order listed (#168 (comment)). That instruction is his approval of this item. Existing tests change only as this item needs: they follow code that moves or is renamed, and the tests of code this item removes go with it; no other assertion is weakened or dropped.
Model: opus-5-5