Ghee/HISTORY.md

4.6 KiB

Ghee History

Ghee's development began as an adjunct to the the 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 rming, seting, cping, and mving.

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.