Added ensembles.io to README.
Fixed link to ensembles.io.
Updated README for recent changes in Idiomatic.
Merge branch 'master' of https://github.com/drewmccormack/ensembles
Fixed a loop causing a compiler warning about unused variable.
Various settings changes related to new Xcode warnings.
Added link to MealPlan blog post.
Changed the timestamp used for data imported during leeching to distantPast. This data should be subordinate to the existing sync data, and this should achieve that goal.
Because it is a baseline, the timestamp doesn’t have too much meaning anyway.
Clarified dragging of project in README.
Changed the baseline fetching method to return the most recent baseline where there are more than one. It was raising an exception (which is not cool).
There are times when there is legitimately more than one baseline (i.e. before a merge has consolidated it). The problem was arising during saves, which were apparently occurring before the second baseline was consolidated.
Changed the CDERebaser class to be less trigger-happy with rebasing. The way the compaction is estimated has been changed. It used to just estimate the reduction in the number of object changes. Now it has a rough evaluation of the data change, and it also only triggers for 500 object changes or more.
Updated comment.
Added locking to rebaser, baseline consolidator, and the save monitor. They now lock the event store context to perform atomic operations, where necessary.
This was motivated by a case where a new object was lost on the saving device. There were a lot of rebases occurring on each device, and it seems possible that a race condition could have occurred between the save monitor creating a new event, and the rebaser absorbing that event.
Updated a comment.
Merge branch 'master' of https://github.com/drewmccormack/ensembles
Removed recently added locking of the event store. Doesn’t really solve problems, and it could cause deadlocks.
Refactored event builder so that the save monitor can create and commit its event atomically, in a single performBlock…
Previously it was spread over several blocks, and it is thought this may have caused a race condition with the rebaser, which would process a half made event.
Changed naming scheme for baselines to include a persistent store identifier prefix. This should avoid the unlikely event that two different baselines end up with the same filename.
This required more general changes. The CDEEventFile class was introduced. It effectively maps the events to filenames, and you can now have more than one alias (filename) for each event.
Improved the code to remove redundant baselines. It now accounts for possibility the two baselines have exactly the same revisions. It is also a bit more efficient, only visiting each pair of events once.
Added logging for when it is doing a full integration.