OK everyone, here are lots of observations and questions to start off.

I have built and "kicked the tyres of" the current 'pristines-on-demand'
branch, and have skimmed through its changes.

It works as advertised in simple usage:

    * pristines are missing until needed (for diff, commit, revert,
resolve, etc.),
    * corresponding disk space reduction
    * (and speed differences such as faster checkout, slower diff)
    * fetches pristines when needed, deletes them afterwards

It also passes the (branch) test suite, although I note on the branch
there are modifications to some tests and some are skipped; I haven't
yet reviewed what and why.

In skimming through the branch diff I noted:

    * extra 'hydrated' flag column added in the WC DB 'pristine' table,
    * corresponding format bump and upgrade code,
    * corresponding modifications to WC-layer pristines handling,
    * 'textbase_sync' calls added before and after relevant client-layer
operations, to hydrate and dehydrate any relevant files, seems to be the
main substance of the high level logic.

I would very much appreciate anyone able to review the WC code changes
to any extent.  I feel the depth of review I can offer is limited in
this area.

Important Question:

    * Is the approach with a WC format bump the best approach?

I see two options to consider:

    * with format bump like this, plus completing the multi-WC-format
branch work
    * re-work the implementation of the concept, to not change the
declared format number or DB schema, but instead to query "is the file
present on disk" instead of the DB 'hydrated' flag

For each of those options,

    * what is the outcome in terms of interoperability?
    * how much work is involved? (or is the 2nd one impossible?)

How would these compare as overall solutions from a user perspective?

Some notes:

    * Reworking Evgeny's code would obviously require considerable effort.

    * Using a new field in the database of course is the best way to
store that data measured by cost per lookup. However that by itself
doesn't guarantee the best overall end result.

    * Getting the multi-WC-format work done now also buys us future
WC-format compatibility scenarios as a bonus.

    * If the multi-WC-format branch is incorporated, I'm not yet clear
what interop story that gives us. I'll try to learn that next.

FWIW, the interop behaviour of current 'pristines-on-demand' branch by
itself is:

    * new svn errors on an old WC; recommends 'svn upgrade'
    * new svn 'svn upgrade' quickly upgrades the WC in place, removing
pristines of all unmodified files
    * old svn errors on a new WC

The user experience of the current 'pristines-on-demand' branch seems
pretty good for basic scenarios. Questions I haven't asnwered yet:

    * Does it fetch more pristines from the server than are needed by
the operation in progress, in some cases?

While I'm working on answering all these questions, I would very much
appreciate any advice and insight anyone can offer.

- Julian

Reply via email to