I committed an initial prototype for checkpointing backed by a local
repo embedded in the WC (the "option 3" design), on the
"shelve-checkpoint3" branch.

http://svn.apache.org/r1803046 and follow-ups.

Here is the help output:
[[[
$ svn checkpoint --help
checkpoint: Checkpoint the local changes.
usage: 0. checkpoint init
       1. checkpoint save
       2. checkpoint revert
       3. checkpoint rollback NUMBER
       4. checkpoint list|log
       5. checkpoint squash
       6. checkpoint finish|uninit

  0. Initialize checkpointing.
     ### WC must be a checkout of r1 of repo root
     ### required before using other checkpointing commands
  1. Save the working state as a new checkpoint.
  2. Revert the working state to the current checkpoint.
  3. Roll back the working state to checkpoint NUMBER.
  4. List all checkpoints.
  5. Squash all checkpoints to just a base and working state.
  6. Return to a plain WC based on the original repository.
     ### doesn't yet delete the checkpoint repo
]]]

There are more subsubcommands there than we would probably want in a
final user interface.

Here is some demo output.

[[[
$ . demo-setup.sh  # creates a repo and wc with three text files
Adding         config.txt
Adding         hello.txt
Adding         old.txt
Transmitting file data ...done
Committing transaction...
Committed revision 1.

$ svn checkpoint init
creating repo
copying base
Skipped '.svn/.svn'
Adding         config.txt
Adding         hello.txt
Adding         old.txt
Committing transaction...
switching base

$ echo foo >> hello.txt

$ svn checkpoint save
Sending        hello.txt
Transmitting file data .done
Committing transaction...
saved checkpoint 1

$ svn checkpoint list
* 1 2017-07-26T13:36

  0 2017-07-26T13:36


$ svn st

$ svn checkpoint finish
checkpointing any outstanding changes
squashing checkpoints to a working state
  (squash: updating to r1)
Updating '.':
U    hello.txt
Updated to revision 1.
  (squash: merging checkpointed changes into WC)
--- Merging r2 into '.':
U    hello.txt
pruning checkpoint 1
switching back to original base
destroying the checkpoints repo
  (destroying the repo is not implemented yet)

$ svn st
M       hello.txt

]]]

To commit the set of changes to the original repo, you use 'finish'
(which does a 'squash' followed by 'relocate'), giving a normal modified
WC state, and use a normal commit from there.

If you read this far and get a chance to try it out, I'd love to hear
your thoughts on the overall shape and the big-picture possibilities. (I
am not so concerned about details at this stage, but mention those too
and hopefully they will spark further thoughts.)

- Julian


On 2017-07-14, Julian Foad wrote:
> I committed an initial prototype for checkpointing on the
> "shelve-checkpoint" branch.  http://svn.apache.org/r1801942
> 
> This prototype is of the "store snapshot patches" ("option 1") design.
[...]

Reply via email to