Talk:Version support for datastore/Proposal

From Sugar Labs
< Talk:Version support for datastore
Revision as of 05:28, 16 April 2009 by Sascha silbe (talk | contribs) (add some IRC notes)
Jump to navigation Jump to search

Scratch area

Everything below isn't meant for public consumption, but just a reminder / place of reflection for me.

ML notes

  • it has to be simple and natural to prune old versions and documents
  • ... and to display the disk usage of docs and their versions!
  • it has to interop well with the FS underneath
  • it has to interop with the XS-based backups...
  • [storage/processing efficiency important]
Basically, all versions of a document would appear within the list view timeline. Their order within the list would be determined by their timestamp. If I work on 3 iterative versions of a document, then go back to the second version and make changes, I get a new 4th version which appears as the most recent item in the Journal. It doesn't matter (at least here) that I technically have a branch at version 2, which has children 3 and 4. What matters in the Journal perspective is that I worked on version 4 most recently. The tree is flattened into a list in the time dimension.
This is also the reason that the latest Journal designs split the UI into "action" and "object" views. The action view would be a temporal history of everything you've done (with each version through time). The object view would represent each object only once, by it's most recent version, thus providing a much shorter list.

IRC notes

Activities are stateless functions. That is, an Activity has no intrinsic state; if you start it blank, it's the same every time.
All state lives in the Datastore. When you launch an Activity with a Journal entry as input, it produces output that goes back in the Journal.
Consider what happens when a user "resumes" an entry twice, maybe even with two different activities. What should happen?
It seems pretty clear to me that the result should be two entries, representing the output of each of these activities. [new branch, with same or different name]
[example for whole-tree activity state: wine activity]
[xdelta for binary diffs]
[in-place execution of activities from datastore]
[opportunistic hardlinking using mtime+checksum]
[filenames are just metadata]
[evaluate bazaar etc. as backend] -- SS: potential conflict with XIP - though git might be fine