# Ghee History Ghee's development began as an adjunct to the the [Audiotater](https://git.disroot.org/joshhansen/audiotater) audio annotation tool, but soon developed a life of its own. ## 0.1.0 - 2 Aug 2023 (as "Hatter") Initial release including commands to manipulate individual records: `cp`, `mv`, `rm`, `get`, `set`. ### 0.2.0 (as "Mattress") First command that operates on records as a group ("table"): `idx`. Also generates shell completions for Bash, Fish, PowerShell, Elvish, and anything else that `clap_complete` supports. Rename from Hatter to Mattress. ### 0.2.1 (as "Mattress") Implement setting of user.mattress.keyname ### 0.3.0 - 10 Aug 2023 * Make `get` recursive by default * SQL WHERE-style select clauses using `-w --where` * Rename from Mattress to Ghee. Third time's the charm, right? ### 0.4.0 - 30 Aug 2023 Introduces the REPL and subcommands `init`, `ins`, `del`, and `ls`. Both `get` and `del` now use the best available index to minimize traversals. -[x] REPL -[x] `ins` for adding to table while maintaining related indexes -[x] `ins` from JSON -[x] `del` for removing from table while maintaining related indexes -[x] `ls` to show Ghee's view of the world -[x] `init` to initialize a directory as a full-fledged Ghee table (with specified key names) -[x] Sensible default destination for `idx` -[x] Make `get` stop listing nested indices -[x] Make `get` accelerate traversal using the best available index (a la `del`) -[x] Make `get` return paths from original index rather than the one used to accelerate -[x] Fix output order, making commands reproducible ### 0.5.0 - 19 Sep 2023 Maintains soundness of indices when `rm`ing, `set`ing, `cp`ing, and `mv`ing. Makes `rm` and `set` recursive, with optional opt-out. Unit tests all commands. Introduces `create`; like `init` but creates the directory for you. Adds the ability to insert from JSON on `init`. -[x] `init`: allow `ins`-like insertion from JSON -[x] `create` to create directory and then `init` -[x] Test predicates using default key names, e.g. `key0<10` -[x] `rm`: recursive by default -[x] `rm`: when removing indexed xattrs, update the relevant indices -[x] `set`: recursive by default -[x] `set`: when setting indexed xattrs, update the relevant indices -[x] Test `cp_or_mv` -[x] Test `ls` ## 0.5.1 Fixes a bug when indices were chained together but not reflected in all related indices' table info. -[x] `idx`: ensure that indices beyond the second result in all related indices being declared as related ## 0.6.0 - 2 Oct 2023 Introduces tools for snapshotting and rolling back the state of Ghee tables, built using Btrfs subvolume snapshots. The `commit` command makes a snapshot of the current state; `log` lists past changes; `restore` returns files to their `HEAD` state; and `reset` returns all files to their state in a specified commit. As in Git, a reference to a `HEAD` commit is maintained, but Ghee stores it in the extended attribute `user.ghee.v0.HEAD`. (Versioning of the `user.ghee` xattr namespace is also accomplished in this release.) A `touch` command is introduced to allow easy creation of files, whose xattrs will be inferred from their position within the table / index directory structure. Snapshot testing has been greatly strengthened, testing against ext4 and btrfs filesystems as well as relative and absolute paths. -[x] ~~`init`~~: `create`: create as a Btrfs subvolume when possible -[x] `ghee commit ./people -m "message!"`: commit the `./people` table in its current form with message "message!" -[x] `ghee log ./people`: show commit messages for all commits in the `./people` table. -[x] `commit`: inherit snapshot dir ownership from parent -[x] `commit`: unit test; implemented, but disabled as it requires superuser -[x] `ghee status ./people`: show how the ./people table has changed since last commit; using CoW snapshots -[x] `ghee reset ./people gf037d2c98`: replace the current contents of the `./people` table to its state in commit gf037d2c98 -[x] `ghee restore ./people`: replace all changed files in `./people` with their versions in the most recent commit -[x] Test `get` on non-table? Whatever that bug is... -[x] Ensure all commands accept relative paths -[-] Maybe store table index paths as relative paths? (Then we can operate on snapshots directly.) Rejected in favor of storing absolute paths, which we then relativize -[x] Cover absolute paths in example.sh -[x] Version user.ghee namespace -[x] Rename most-recent-snapshot -> HEAD -[x] Update README.md for 0.6 ## 0.6.1 - 2 Oct 2023 Points the `btrfsutil` dependency at a published crate version rather than Git repository.