forked from mirrors/jj
The new store works the same way as the `OpHeadsStore`. It keeps track of the current head file(s) by recording their names in a directory. When a write happens, it adds the new head and then removes the old head. There will be generally be a single head at a time. The only exception is when there's been concurrent operations (locally, or remotely, in the case of a distributed file system). When there are multiple heads files, they are automatically merged. No guarantee is given about which value wins if the key exists in several heads; the store is meant to be used for data that's immutable once written. As long as different keys are written, this is a CRDT. That makes it fit for solving both #3 and #7. |
||
---|---|---|
.. | ||
backend.rs | ||
commit.rs | ||
commit_builder.rs | ||
conflicts.rs | ||
dag_walk.rs | ||
diff.rs | ||
file_util.rs | ||
files.rs | ||
git.rs | ||
git_backend.rs | ||
gitignore.rs | ||
index.rs | ||
index_store.rs | ||
lib.rs | ||
local_backend.rs | ||
lock.rs | ||
matchers.rs | ||
op_heads_store.rs | ||
op_store.rs | ||
operation.rs | ||
protos.rs | ||
refs.rs | ||
repo.rs | ||
repo_path.rs | ||
revset.pest | ||
revset.rs | ||
revset_graph_iterator.rs | ||
rewrite.rs | ||
settings.rs | ||
simple_op_store.rs | ||
stacked_table.rs | ||
store.rs | ||
testutils.rs | ||
transaction.rs | ||
tree.rs | ||
tree_builder.rs | ||
view.rs | ||
working_copy.rs |