mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 08:47:12 +03:00
4f39a8e5a6
Summary: Part of the mutation graph (excluding split and fold) can fit in the DAG abstraction. Add a method to do that. This allows cross-dag calculations like: changelogdag = ... # suppose available by segmented changelog # mutdag and changelogdag are independent (might have different nodes), # with full DAG operations on either of them. mutdag = mutation.getdag(...) mutdag.heads(mutdag.descendants([node])) & changelogdag.descendants([node2]) # now possible Comparing to the current situation, this has some advantages: - No need to couple the "visibility", "filtered node" logic to the mutation layer. The unknown nodes can be filtered out naturally by a set "&" operation. - DAG operations like heads, roots can be performed on mutdag when it's previously impossible. We also get operations like visualization for free. There are some limitations, though: - The DAG cannot represent non 1:1 modifications (fold, split) losslessly. Those relationships are simply ignored for now. - The MemNameDag is not lazy. Reading a long chain of amends might be slow. For most normal use-cases it is probably okay. If it becomes an issue we can seek for other solutions, for example, store part of mutationstore directly in a DAG format on disk, or have fast paths to bypass long predecessor chain calculation. Reviewed By: DurhamG Differential Revision: D21486521 fbshipit-source-id: 03624c8e9803eb1852b3034b8f245555ec582e85 |
||
---|---|---|
.. | ||
src | ||
Cargo.toml |