-- Symlinked rerere to get awesomeness. Problems:
- - Permissions
- - Might not make a huge difference; how does it handle empty file
- and removed file cases?
- - Need to manually run git rerere subsequently to reap benefits
- - Majority of resolutions have to happen pre-merge (see below)
- - Consider workflow: run wizard mass-upgrade, and then begin
- resolving working copies one by one. Each time we resolve
- a copy, it should cause other copies to start magically resolving.
- So, ordering should be:
- 1. Perform merge
- 2. If it fails, merge the rr-cache with central rr-cache
- (this operation needs to be atomic) and replace it
- with a symlink. File permissions preferably should
- be made correct, but don't have to be since only root
- will be touching subsequently. If the hash already exists,
- don't do anything (maybe record this for the benefit
- of Mister Kite aka so we don't have to do a full traversal,
- this optimization might be essential)
- 3. When a human is resolving the merges, they are "low
- concurrency", i.e. only one commit recording rerere will
- happen at a time. This means that rr-cache does not
- need to be concurrent safe. Some number of hashes in
- the rr-cache will start having postimages; we'll use
- a full-scan to figure that out. Then cross-reference those
- with the recorded pending resolutions, and figure out which
- checkouts we can run rerere on (this gets permissions kind
- of tricky). We'll try an alternative plan: manually require
- the user run some sort of retry command that does this as
- root; presumably they'd run this every ten installs or
- something. A user can run git rerere to get a resolution
- early.
- This requires some new data-structures:
- - Besides the merge.txt file (which should never ever change),
- we should have an outstanding.txt file which gets modified
- as our scripts do resolutions behind our back. Those modifications
- might a little annoying for a human to keep up with, so we should
- recommend something like watch -n2 "head file" or something
- - We need to keep track of the hashes and the cross-referencing.
- A very small sqlite database might be a good idea here, although
- the type of information we're interested in a somewhat unnatural
- query. Alternatively, we just have a very simple text file.
-- Make it possible to say certain classes of missing files are ok
-
-- Wizard needs a correct arch/ setup
-- The wizard command, when not on scripts, should automatically SSH to
- scripts and start executing there?
-- Write the code to make Wordpress figure out its URL from the database